学习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中的元类(metaclass)
Feb 14 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
Python运算符重载详解及实例代码
Mar 07 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
python GUI实现小球满屏乱跑效果
May 09 Python
django云端留言板实例详解
Jul 22 Python
window7下的python2.7版本和python3.5版本的opencv-python安装过程
Oct 24 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
Python3实现建造者模式的示例代码
Jun 28 Python
解决pytorch 的state_dict()拷贝问题
Mar 03 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
PHP爆绝对路径方法收集整理
2012/09/17 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
php按单词截取字符串的方法
2015/04/07 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
php判断电子邮件是否正确方法
2018/12/04 PHP
php连接mysql数据库最简单的实现方法
2019/09/24 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
Angular2搜索和重置按钮过场动画
2017/05/24 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
Python中的Matplotlib模块入门教程
2015/04/15 Python
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
PyQt5每天必学之进度条效果
2018/04/19 Python
Python实现的knn算法示例
2018/06/14 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
供应链金融服务方案
2014/05/25 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
汽车转让协议书
2015/01/29 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
处理canvas绘制图片模糊问题
2022/05/11 Javascript
Mysql中mvcc各场景理解应用
2022/08/05 MySQL