学习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私有属性和方法实例分析
Jan 15 Python
Python抽象类的新写法
Jun 18 Python
Python tkinter模块中类继承的三种方式分析
Aug 08 Python
Python进程间通信之共享内存详解
Oct 30 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
PyTorch预训练的实现
Sep 18 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 Python
Python实现对齐打印 format函数的用法
Apr 28 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
星际争霸中的热键
2020/03/04 星际争霸
zend framework配置操作数据库实例分析
2012/12/06 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
js实现ArrayList功能附实例代码
2014/10/29 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
提升jQuery的性能需要做好七件事
2016/01/11 Javascript
Angular ng-repeat 对象和数组遍历实例
2016/09/14 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
详解webpack多页面配置记录
2018/01/22 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
Jquery实现获取子元素的方法分析
2019/08/24 jQuery
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
python生成excel的实例代码
2017/11/08 Python
pytorch 共享参数的示例
2019/08/17 Python
HTML5新表单元素_动力节点Java学院整理
2017/07/12 HTML / CSS
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
什么是数组名
2012/05/10 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
教师自我鉴定范文
2013/11/10 职场文书
销售演讲稿范文
2014/01/08 职场文书
大学毕业寄语大全
2014/04/10 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python