Python编码问题整理纪录

在开发Python程序的过程中,会涉及到三个方面的编码:

      1、Python程序文件的编码

      2、Python程序运行时环境(IDE)的编码

      3、Python程序读取外部文件、网页的编码



1、Python程序文件的编码

      例如:

      Python2自带的IDE,当创建了一个文件保存的时候提示:

图片发自简书App

    这是因为Python2编辑器默认的编码是ASCII,它是无法识别中文的,所以会弹出这样的提示。这也是我们在大多情况下写python2程序的时候习惯在程序的第一行加上:#coding=utf-8

      其实,这里的编码文件是很容易解决的。


2、Python程序运行时环境(IDE)的编码

      执行下面的一段程序。

      #coding=utf-8from selenium import webdriver driver = webdriver.Firefox() driver.get("http://www.baidu.com") # 返回百度页面底部备案信息 text = driver.find_element_by_id("cp").text print(text) driver.close()

      在windows cmd下执行:


图片发自简书App

      我们要获取的信息是:

      ©2015 Baidu 使用百度前必读 意见反馈 京ICP证030173号

      Windows cmd 用的是cp936,也就是中文的GB2312,在GBK的字符集里没有“©”,这就导致通过GBK解析的时候出现编码问题。

      这就像你在翻译英文的时候,出现了一个单词,这个单词你查遍了牛津大词典都没找到对应的含义解释,那么自然是会有问题的。

      那假设,我还就想在cmd下执行这个python程序了,那么可以去修改cmd的默认编码类型为utf-8,对应的编码为CHCP 65001(utf-8)。在cmd 下输入:chcp 65001 命令回车。

图片发自简书App

    然后,修改cmd的字体为“Lucida Console”,再来执行程序就可以被正确输出了。


图片发自简书App


3、Python程序读取外部文件、网页的编码




认识常见编码

      GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码

      GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名

      cp936:中文本地系统是Windows中的cmd,默认codepage是CP936,cp936就是指系统里第936号编码格式,即GB2312的编码。

      (当然有其它编码格式:cp950 繁体中文、cp932 日语、cp1250 中欧语言。。。)

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

      UTF-8 (8-bit Unicode Transformation Format)是最流行的一种对 Unicode 进行传播和存储的编码方式。它用不同的 bytes 来表示每一个代码点。ASCII 字符每个只需要用一个 byte ,与 ASCII 的编码是一样的。所以说 ASCII 是 UTF-8 的一个子集。

代码页是字符集编码的别名,也有人称"内码表"。早期,代码页是IBM称呼电脑BIOS本身支持的字符集编码的名称。当时通用的操作系统都是命令行界面系统,这些操作系统直接使用BIOS供应的VGA功能来显示字符,操作系统的编码支持也就依靠BIOS的编码。现在这BIOS代码页被称为OEM代码页。图形操作系统解决了此问题,图形操作系统使用自己字符呈现引擎可以支持很多不同的字符集编码。

  早期IBM和微软内部使用特别数字来标记这些编码,其实大多的这些编码已经有自己的名称了。虽然图形操作系统可以支持很多编码,很多微软程序还使用这些数字来点名某编码。

下表列出了所有支持的代码页及其国家(地区)或者语言:

代码页      国家(地区)或语言

437          美国

708          阿拉伯文(ASMO 708)

720          阿拉伯文(DOS)

850          多语言(拉丁文 I)

852          中欧(DOS) - 斯拉夫语(拉丁文 II)

855          西里尔文(俄语)

857          土耳其语

860          葡萄牙语

861          冰岛语

862          希伯来文(DOS)

863          加拿大 - 法语

865          日耳曼语

866          俄语 - 西里尔文(DOS)

869          现代希腊语

874          泰文(Windows)

932          日文(Shift-JIS)

936          中国 - 简体中文(GB2312)

949          韩文

950          繁体中文(Big5)

1200        Unicode       

1201        Unicode (Big-Endian)

1250        中欧(Windows)

1251        西里尔文(Windows)

1252        西欧(Windows)

1253        希腊文(Windows)

1254        土耳其文(Windows)

1255        希伯来文(Windows)

1256        阿拉伯文(Windows)

1257        波罗的海文(Windows)

1258        越南文(Windows)

20866        西里尔文(KOI8-R)

21866        西里尔文(KOI8-U)

28592        中欧(ISO)

28593        拉丁文 3 (ISO)

28594        波罗的海文(ISO)

28595        西里尔文(ISO)

28596        阿拉伯文(ISO)

28597        希腊文(ISO)

28598        希伯来文(ISO-Visual)

38598        希伯来文(ISO-Logical)

50000        用户定义的

50001        自动选择

50220        日文(JIS)

50221        日文(JIS-允许一个字节的片假名)

50222        日文(JIS-允许一个字节的片假名 - SO/SI)

50225        韩文(ISO)

50932        日文(自动选择)

50949        韩文(自动选择)

51932        日文(EUC)

51949        韩文(EUC)

52936        简体中文(HZ)

65000        Unicode (UTF-7)

65001        Unicode (UTF-8)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容