python中的unicode编码

概括、从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格式,但是如果用e clipse 编辑源文件,虽然在编辑器中指定文件编码为UTF-8,但是因为没有记入BOM标志,所以必须在源文件开始处加上#coding=utf-8, 用注释来提示解释器源文件的编码方式挺有意思。

 

2.4、举例:例如我们要向终端输出"我是中国人"。 

#coding=utf-8     告诉python解释器用的是utf-8编码,我用的是eclipse+pydev
print "我是中国人"  #源文件本身也要存成UTF-8编码

2.5、当然我们可以用其他unicode编码,例如GB2312,SHIFT_JIS等等,但是建议用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()

 

五、字符串相关

     1、默认情况下字符串的编码格式和源码的编码格式一致。

     2、如果在字符串前面加上u,则字符串会采用unicode编码。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值