学习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中的zip函数使用示例
Jan 29 Python
在Python中使用正则表达式的方法
Aug 13 Python
Python选课系统开发程序
Sep 02 Python
python实现textrank关键词提取
Jun 22 Python
python使用folium库绘制地图点击框
Sep 21 Python
Python读取实时数据流示例
Dec 02 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
python实现tail -f 功能
Jan 17 Python
Python如何根据时间序列数据作图
May 12 Python
详解Flask前后端分离项目案例
Jul 24 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
opencv实现图像几何变换
Mar 24 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
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
php实现异步数据调用的方法
2015/12/24 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
详解CSS样式中的 !important * _ 符号
2021/03/09 HTML / CSS
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
javascript制作2048游戏
2015/03/30 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
使用python 获取进程pid号的方法
2014/03/10 Python
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
python3 selenium自动化 frame表单嵌套的切换方法
2019/08/23 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
网上开店必备创业计划书
2014/01/26 职场文书
超市创业计划书
2014/04/24 职场文书
五一促销活动总结
2014/07/01 职场文书
离婚协议书范本
2015/01/26 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS