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

s4n0splo  于 2023-03-16  发布在  Python
关注(0)|答案(2)|浏览(429)

我试着使用类似下面的代码来读取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"作为默认编码呢?为什么要指定它呢?

rseugnpd

rseugnpd1#

Python 3的默认UTF-8编码只扩展到bytesstr类型之间的转换。open()根据环境选择适当的默认编码:

  • encoding* 是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认的编码依赖于平台(无论locale.getencoding()返回什么),但是Python支持的任何文本编码都可以使用。参见codecs模块以获得支持的编码列表。

例如,西欧/北美地区的Windows机器通常使用8位Windows-1252字符集(Python将这种编码称为'cp1252')。

xienkqul

xienkqul2#

按照here的建议,也可以通过设置环境变量PYTHONUTF8=1来解决这个问题,这会导致open默认使用UTF-8编码,而不是平台的默认编码。

相关问题