Python 3 默认编码 cp1252

12

最近我遇到了一些问题,尝试在安装了Anaconda 4.1.1的Python 3.5.2、运行于索尼VAIO Windows 10系统中的Biopython模块中解码一个句柄(handle),出现了0x81、0x8D映射错误。

进行了一些研究后,似乎问题可能是默认解码编解码器是cp1252。我运行了下面的代码,发现默认编解码器确实设置为cp1252。

但是,一些帖子建议Python 3应该将默认编解码器设置为utf8。如果是这样,为什么我的是cp1252,我该如何解决呢?

import locale os_encoding = locale.getpreferredencoding()
1个回答

12
根据 Python 3.0 新特性,默认编码因平台而异。在很多情况下,但不是全部情况,系统的默认值为 UTF-8;您不能完全依赖这个默认值。
根据 PEP 3120:UTF-8 现在是默认源编码。
换句话说,默认情况下 Python 会使用 UTF-8 打开源文件,但与文件系统的任何交互都取决于环境。强烈建议使用 open(filename, encoding='utf-8') 来读取文件。
另一个变化是,b'bytes'.decode()'str'.encode() 在没有参数时使用 utf-8 而不是 ascii。 Python 3.6 更改 了一些默认设置:
PEP 529: 将 Windows 文件系统编码更改为 UTF-8
PEP 528: 将 Windows 控制台编码更改为 UTF-8
但是,open() 的默认编码仍然是 Python 从环境中推断出来的编码。
似乎 3.7 版本将添加一种(选择性的!)模式,忽略环境语言设置的编码方式,始终全部使用 UTF-8(除了 Windows 使用 UTF-16 的特定情况)。请参见 PEP 0540 和相应的 Issue 29240

澄清一下,我使用.read()从Entrez.efetch模块解析句柄。那么是否可以像open()一样指定编码? - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接