学习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中的True,False条件判断实例分析
Jan 12 Python
Python中type的构造函数参数含义说明
Jun 21 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
Python检测网站链接是否已存在
Apr 07 Python
浅谈Python中的私有变量
Feb 28 Python
修改python plot折线图的坐标轴刻度方法
Dec 13 Python
Python  Django 母版和继承解析
Aug 09 Python
在Python中预先初始化列表内容和长度的实现
Nov 28 Python
python3通过udp实现组播数据的发送和接收操作
May 05 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
python遍历路径破解表单的示例
Nov 21 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
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
php判断数组是否为空的实例方法
2020/05/10 PHP
JavaScript学习笔记(十)
2010/01/17 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
Three.js的使用及绘制基础3D图形详解
2017/04/27 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
JavaScript JSON使用原理及注意事项
2020/07/30 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
Python列表计数及插入实例
2014/12/17 Python
python操作gmail实例
2015/01/14 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
python实现的希尔排序算法实例
2015/07/01 Python
Python探索之ModelForm代码详解
2017/10/26 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
Python for循环与getitem的关系详解
2020/01/02 Python
tensorflow 获取checkpoint中的变量列表实例
2020/02/11 Python
Laravel中Kafka的使用详解
2021/03/24 PHP
田径运动会开幕式及主持词
2014/03/28 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
大学生见习报告范文
2014/11/03 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书