Python论坛  - 讨论区

标题:学习python处理python编码

2011年01月10日 星期一 11:10

    概括从python开始就处理unicode字符,python源文件的编码与解码,我们写的python程序从产生到执行的过程如下,

     

    概括、从 python 1.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、举例:例如我们要向终端输出"我是中国人"。 

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

    三、编码的转换,两种编码的转换要用UTF-16作为中转站。

    举例:如果有一个文本文件jap.txt,里面有内容 "私は中国人です。",编码格式是日文编码SHIFT_JIS,

    还有一个文本文件chn.txt,内容是"中华人民共和国",编码格式是中文编码GB2312。

    我们如何把两个文件里的内容合并到一起并存储到utf.txt中并且不显示乱码呢,可以采用把两个文件的内容都转成UTF-8格式,因为UTF-8里包含了中文编码和日文编码。

        
    1. #coding=utf-8     
    2.     
    3. try :     
    4.     JAP=open( "e:/jap.txt" , "r" )     
    5.     CHN=open( "e:/chn.txt" , "r" )     
    6.     UTF=open( "e:/utf.txt" , "w" )     
    7.          
    8.     jap_text=JAP.readline()     
    9.     chn_text=CHN.readline()     
    10.      #先decode成UTF-16,再encode成UTF-8     
    11.     jap_text_utf8=jap_text.decode( "SHIFT_JIS" ).encode( "UTF-8" #不转成utf-8也可以     
    12.     chn_text_utf8=chn_text.decode( "GB2312" ).encode( "UTF-8" ) #编码方式大小写都行utf-8也一样     
    13.     UTF.write(jap_text_utf8)     
    14.     UTF.write(chn_text_utf8)     
    15.          
    16. except  IOError,e:     
    17.      print   "open file error" ,e    

     

    四、Tk库支持ascii,UTF-16,UTF-8

     

        
    1. #coding=utf-8     
    2.     
    3. from  Tkinter  import  *     
    4.     
    5. try :     
    6.     JAP=open( "e:/jap.txt" , "r" )     
    7.     str1=JAP.readline()     
    8.     
    9. except  IOError,e:     
    10.      print   "open file error" ,e     
    11.     
    12. root=Tk()     
    13.     
    14. label1=Label(root,text=str1.decode( "SHIFT_JIS" ))  #如果没有decode则显示乱码     
    15. label1.grid()     
    16.     
    17. root.mainloop()    

    以上是学习python处理python编码的基本过程,希望对大家有帮助。

    来源

2011年01月10日 星期一 11:19

为啥只有你发贴?

2011年01月16日 星期日 13:39

赞,很赞,lz辛苦了

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号