我最近在索尼 vaio windows 10 系统上使用 anaconda 4.1.1 python 3.5.2 安装从 Biopython 模块解码句柄(错误映射 0x81、0x8D)时遇到了一些问题
经过一番研究,问题似乎可能是默认解码编解码器是 cp1252。我运行下面的代码,发现默认编解码器确实设置为 cp1252。
然而,一些帖子表明 python 3 应该将默认编解码器设置为 utf8。那是对的吗?如果是这样,为什么我的是 cp1252,我该如何解决这个问题?
import locale
os_encoding = locale.getpreferredencoding()
根据Python 3.0 的新增功能 https://docs.python.org/3/whatsnew/3.0.html,
有一个依赖于平台的默认编码 […] 在许多情况下,但不是全部,系统默认是 UTF-8;你永远不应该指望这个默认值。
and
PEP 3120:默认源编码现在为 UTF-8。
换句话说,Python 默认以 UTF-8 格式打开源文件,但与文件系统的任何交互都将取决于环境。强烈推荐使用open(filename, encoding='utf-8')
读取文件。
另一个变化是b'bytes'.decode()
and 'str'.encode()
不带参数使用 utf-8 而不是 ascii。
Python 3.6 的变化 https://docs.python.org/3/whatsnew/3.6.html更多默认值:
PEP 529:将 Windows 文件系统编码更改为 UTF-8
PEP 528:将 Windows 控制台编码更改为 UTF-8
但默认编码为open()
仍然是 Python 设法从环境中推断出的任何内容。
看来 3.7 将添加一个(选择加入!)模式,其中环境区域设置编码被忽略,并且所有内容始终都是 UTF-8(我想 Windows 使用 UTF-16 的特定情况除外)。看PEP 0540 https://www.python.org/dev/peps/pep-0540/以及相应的问题 29240 https://bugs.python.org/issue29240.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)