Python忽略编码参数,使用cp1252

1 投票
1 回答
1139 浏览
提问于 2025-04-17 20:37

我有一个很长的json文件,里面包含了utf-8字符(而且它的编码也是utf-8)。我想用Python的内置json模块来读取这个文件。

我的代码是这样的:

dat = json.load(open("data.json"), "utf-8")

虽然我知道“utf-8”这个参数其实是多余的,因为默认就是utf-8。但我还是遇到了这个错误:

Traceback (most recent call last):
  File "winratio.py", line 9, in <module>
    dat = json.load(open("data.json"), "utf-8")
  File "C:\Python33\lib\json\__init__.py", line 271, in load
    return loads(fp.read(),
  File "C:\Python33\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 28519: ch
aracter maps to <undefined>

我的问题是:为什么Python似乎忽略了我指定的编码,反而尝试用cp1252来加载这个文件呢?

1 个回答

0

试试这个:

import codecs

dat = json.load(codecs.open("data.json", "r", "utf-8"))

这里还有一些关于在编解码库中写入模式的小提示:在Python中写入UTF-8文件

撰写回答