欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习python处理python编码问题

程序员文章站 2023-10-31 16:17:52
概括、从python1.6开始就可以处理unicode字符了。 一、几种常见的编码格式。 1.1、ascii,用1个字节表示。 1.2、utf-8,用1个至三个字节表示,表...
概括、从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编码的基本过程,希望对大家有帮助。