open() 默认使用什么编码?

问题描述 投票:0回答:2

我尝试使用这样的代码来读取 JSON 文件(使用 UTF-8 编码):

input = open("json/world_bank.json")
i=0
for l in input:
    i+=1
print(i)

但我有一个

UnicodeDecodeError
。但是,一旦我尝试明确指定编码,它就开始工作了:

input = open("json/world_bank.json",encoding="utf8")

我以为

open
函数会使用
"utf8"
作为默认编码?为什么需要指定?

python python-3.x utf-8 character-encoding
2个回答
69
投票

Python 3 的默认 UTF-8 编码仅扩展到

bytes
str
类型之间的转换。
open()
代替根据环境选择合适的默认编码

encoding 是用于解码或编码文件的编码名称。这应该只用于文本模式。默认编码取决于平台(无论

locale.getencoding()
返回什么),但可以使用 Python 支持的任何文本编码。有关支持的编码列表,请参阅
codecs
模块。

例如,具有西欧/北美语言环境的 Windows 机器通常会使用 8 位 Windows-1252 字符集(Python 称此编码为

'cp1252'
)。


1
投票

按照here的建议,也可以通过设置环境变量

PYTHONUTF8=1
来解决问题。这导致
open
默认使用UTF-8编码,而不是平台的默认编码。

© www.soinside.com 2019 - 2024. All rights reserved.