我试着使用类似下面的代码来读取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"
作为默认编码呢?为什么要指定它呢?
2条答案
按热度按时间rseugnpd1#
Python 3的默认UTF-8编码只扩展到
bytes
和str
类型之间的转换。open()
根据环境选择适当的默认编码:locale.getencoding()
返回什么),但是Python支持的任何文本编码都可以使用。参见codecs
模块以获得支持的编码列表。例如,西欧/北美地区的Windows机器通常使用8位Windows-1252字符集(Python将这种编码称为
'cp1252'
)。xienkqul2#
按照here的建议,也可以通过设置环境变量
PYTHONUTF8=1
来解决这个问题,这会导致open
默认使用UTF-8编码,而不是平台的默认编码。