Python 3.3 和 3.4 `open` 默认编码之间的区别?
Difference between Python 3.3 and 3.4 `open` default encoding?
我有一个包含一些非 ASCII 字符的文件。
$ file bi companies.txt
text/plain; charset=utf-8
在我的桌面上 Python 3.4 我可以 open
这个文件没有问题:
>>> open('companies.txt').read()
'...'
在 CI 系统上 Python 3.3 我得到这个:
>>> 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
returns 'utf-8'
。
知道是什么导致系统行为不同吗?为什么 CI 系统尝试使用 ascii?
文本文件的编码由locale.getpreferredencoding, rather than sys.getdefaultencoding决定。
我有一个包含一些非 ASCII 字符的文件。
$ file bi companies.txt
text/plain; charset=utf-8
在我的桌面上 Python 3.4 我可以 open
这个文件没有问题:
>>> open('companies.txt').read()
'...'
在 CI 系统上 Python 3.3 我得到这个:
>>> 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
returns 'utf-8'
。
知道是什么导致系统行为不同吗?为什么 CI 系统尝试使用 ascii?
文本文件的编码由locale.getpreferredencoding, rather than sys.getdefaultencoding决定。