下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

解决python编码问题要注意的地方

作者:课课家教育     来源: http://www.kokojia.com点击数:717发布时间: 2016-04-07 14:35:37

标签: python编码python知识点python

大神带你学编程,欢迎选课

  在学习Python语言的过程中,要学会处理python编码的问题。本文中提到的是关于python编码的知识点,还有在处理python编码时注意的问题,你们可以从中查漏补缺,希望帮助大家有则改之,无则加勉。

解决python编码问题要注意的地方_python编码_python知识点_课课家

  一、几种常见的编码格式

  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()

赞(15)
踩(1)
分享到:
华为认证网络工程师 HCIE直播课视频教程