学习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读文件逐行处理的示例代码分享
Dec 27 Python
python实现百度关键词排名查询
Mar 30 Python
从零学python系列之教你如何根据图片生成字符画
May 23 Python
Python+Selenium自动化实现分页(pagination)处理
Mar 31 Python
django+js+ajax实现刷新页面的方法
May 22 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
Python分支语句与循环语句应用实例分析
May 07 Python
一文了解Python并发编程的工程实现方法
May 31 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
Django的性能优化实现解析
Jul 30 Python
python使用bs4爬取boss直聘静态页面
Oct 10 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 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
收音机的保养
2021/03/01 无线电
我的论坛源代码(五)
2006/10/09 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php常用数组函数实例小结
2016/12/29 PHP
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
深入理解Angularjs中$http.post与$.post
2017/05/19 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
Vue的属性、方法、生命周期实例代码详解
2019/09/17 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
vue el-table实现自定义表头
2019/12/11 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
Flask框架的学习指南之制作简单blog系统
2016/11/20 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
中软Java笔试题
2012/11/11 面试题
《云雀的心愿》教学反思
2014/02/25 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
水毁工程实施方案
2014/04/01 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
小学班主任工作随笔
2015/08/15 职场文书
spring 项目实现限流方法示例
2022/07/15 Java/Android