Python 3默认编码cp1252

时间:2017-02-06 14:52:57

标签: python character-encoding

我最近在sony 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()

1 个答案:

答案 0 :(得分:8)

根据What’s New In 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 changes更多默认值:

  

PEP 529:将Windows文件系统编码更改为UTF-8

     

PEP 528:将Windows控制台编码更改为UTF-8

但是open()的默认编码仍然是Python设法从环境中推断的。

似乎3.7将添加一个(opt-in!)模式,其中忽略环境语言环境编码,并且所有时间都是UTF-8(除了Windows使用UTF-16的特定情况,我想) 。请参阅PEP 0540和相应的Issue 29240