学习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 相关文章推荐
关于Django外键赋值问题详解
Aug 13 Python
python+splinter自动刷新抢票功能
Sep 25 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
详解Django admin高级用法
Nov 06 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
利用Python脚本实现自动刷网课
Feb 03 Python
Keras中 ImageDataGenerator函数的参数用法
Jul 03 Python
Pandas DataFrame求差集的示例代码
Dec 13 Python
python接口自动化框架实战
Dec 23 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
CI(CodeIgniter)框架配置
2014/06/10 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
使用Bootstrap typeahead插件实现搜索框自动补全的方法
2016/07/07 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
javascript实现图片轮换动作方法
2020/08/07 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
Django在win10下的安装并创建工程
2017/11/20 Python
Python函数和模块的使用总结
2019/05/20 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
浅析python内置模块collections
2019/11/15 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python Map 函数的使用
2020/08/28 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
Marlies Dekkers内衣荷兰官方网店:荷兰奢侈内衣品牌
2020/03/27 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
这段代码难道不该打印出56吗
2013/02/27 面试题
公务员培训自我鉴定
2014/02/01 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
如何写一份好的英文求职信
2014/03/19 职场文书
博士生求职信
2014/07/06 职场文书
校长新学期致辞
2015/07/30 职场文书
物业公司管理制度
2015/08/05 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
python ansible自动化运维工具执行流程
2021/06/24 Python
bat批处理之字符串操作的实现
2022/03/16 Python