Python 3.3和3.4`open`默认编码之间的区别?

时间:2015-01-14 00:18:04

标签: python unicode

我有一个带有一些非ASCII字符的文件。

$ file bi companies.txt
text/plain; charset=utf-8

在我的桌面上使用Python 3.4我可以open这个文件没有问题:

>>> open('companies.txt').read()
'...'

在使用Python 3.3的CI系统上,我得到了这个:

>>> open('companies.txt').read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.3/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 1223: ordinal not in range(128)

但是如果我明确指定encoding='utf8',它就可以了:

>>> open('companies.txt', encoding='utf8').read()
'...'

在两个系统上,sys.getdefaultencoding都会返回'utf-8'

是什么原因导致系统表现不同?为什么CI系统试图使用ascii?

1 个答案:

答案 0 :(得分:2)

文本文件的编码由locale.getpreferredencoding决定,而不是sys.getdefaultencoding