学习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 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python中optparse模块使用浅析
Jan 01 Python
Python字符串拼接的几种方法整理
Aug 02 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
深入解析Python小白学习【操作列表】
Mar 23 Python
python3 配置logging日志类的操作
Apr 08 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
Python爬虫JSON及JSONPath运行原理详解
Jun 04 Python
python怎么自定义捕获错误
Jun 29 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
Dec 03 Python
用python对excel查重
Dec 07 Python
python中spy++的使用超详细教程
Jan 29 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 一个随机字符串生成代码
2010/05/26 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
PHP编辑器PhpStrom运行缓慢问题
2017/02/21 PHP
js玩一玩WSH吧
2007/02/23 Javascript
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
javascript date格式化示例
2013/09/25 Javascript
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
canvas 弹幕效果(实例分享)
2017/01/11 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
2020/01/21 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python字符串详细介绍
2015/05/09 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
python怎么对数字进行过滤
2020/07/05 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
EJB实例的生命周期
2016/10/28 面试题
大四优秀党员个人民主评议
2014/09/19 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书