学习python处理python编码问题


Posted in Python onMarch 13, 2011

概括、从python1.6开始就可以处理unicode字符了。
一、几种常见的编码格式。
1.1、ascii,用1个字节表示。
1.2、UTF-8,用1个至三个字节表示,表示ascii码时只占用1个字节,ascii编码是UTF-8的子集。
1.3、UTF-16,用2个字节表示,在python中,unicode的含义就是UTF-16。
二、python源文件的编码与解码,我们写的python程序从产生到执行的过程如下:
编辑器---->源代码---->解释器---->输出结果
2.1、编辑器决定源代码的编码格式(在编辑器中设定)
2.2、也必须要解释器知道源代码的编码格式(很遗憾很难从编码的数据获知源文件的编码格式)
2.3、补充:在Windows下当用UltraEdit把源代码存成UTF-8时,会在文件中记录BOM标志(不必祥究)这样ActivePython解释器会自动识别源文件是UTF-8格式,但是如果用eclipse编辑源文件,虽然在编辑器中指定文件编码为UTF-8,但是因为没有记入BOM标志,所以必须在源文件开始处加上#coding=utf-8,用注释来提示解释器源文件的编码方式挺有意思。
2.4、举例:例如我们要向终端输出"我是中国人"。

#coding=utf-8 告诉python解释器用的是utf-8编码,我用的是eclipse+pydev 
print "我是中国人" #源文件本身也要存成UTF-8编码

三、编码的转换,两种编码的转换要用UTF-16作为中转站。
举例:如果有一个文本文件jap.txt,里面有内容 "私は中国人です。",编码格式是日文编码SHIFT_JIS,
还有一个文本文件chn.txt,内容是"中华人民共和国",编码格式是中文编码GB2312。
我们如何把两个文件里的内容合并到一起并存储到utf.txt中并且不显示乱码呢,可以采用把两个文件的内容都转成UTF-8格式,因为UTF-8里包含了中文编码和日文编码。
#coding=utf-8 
try: 
JAP=open("e:/jap.txt","r") 
CHN=open("e:/chn.txt","r") 
UTF=open("e:/utf.txt","w") 
jap_text=JAP.readline() 
chn_text=CHN.readline() 
#先decode成UTF-16,再encode成UTF-8 
jap_text_utf8=jap_text.decode("SHIFT_JIS").encode("UTF-8") #不转成utf-8也可以 
chn_text_utf8=chn_text.decode("GB2312").encode("UTF-8")#编码方式大小写都行utf-8也一样 
UTF.write(jap_text_utf8) 
UTF.write(chn_text_utf8) 
except IOError,e: 
print "open file error",e

四、Tk库支持ascii,UTF-16,UTF-8
#coding=utf-8 
from Tkinter import * 
try: 
JAP=open("e:/jap.txt","r") 
str1=JAP.readline() 
except IOError,e: 
print "open file error",e 
root=Tk() 
label1=Label(root,text=str1.decode("SHIFT_JIS")) #如果没有decode则显示乱码 
label1.grid() 
root.mainloop()

以上是学习python处理python编码的基本过程,希望对大家有帮助。
Python 相关文章推荐
Python中optionParser模块的使用方法实例教程
Aug 29 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
python redis存入字典序列化存储教程
Jul 16 Python
Python根据字符串调用函数过程解析
Nov 05 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 Python
浅析Python实现DFA算法
Jun 26 Python
python模块与C和C++动态库相互调用实现过程示例
Nov 02 Python
Python3使用Qt5来实现简易的五子棋小游戏
May 02 Python
布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
Mar 13 #Python
布同 统计英文单词的个数的python代码
Mar 13 #Python
python将多个文本文件合并为一个文本的代码(便于搜索)
Mar 13 #Python
布同自制Python函数帮助查询小工具
Mar 13 #Python
Python中的文件和目录操作实现代码
Mar 13 #Python
python 中的列表解析和生成表达式
Mar 10 #Python
Python中使用中文的方法
Feb 19 #Python
You might like
DISCUZ 分页代码
2007/01/02 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
php截取视频指定帧为图片
2016/05/16 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
jQuery自动添加表单项的方法
2015/07/13 Javascript
JS使用post提交的两种方式
2015/12/03 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
Pycharm debug调试时带参数过程解析
2020/02/03 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
tensorflow dataset.shuffle、dataset.batch、dataset.repeat顺序区别详解
2020/06/03 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
感恩之星事迹材料
2014/05/03 职场文书
酒店节能减排方案
2014/05/26 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2014年学校工会工作总结
2014/12/06 职场文书