首页 > 解决方案 > Python JSON加载 - 文件编码错误

问题描述

Python 3.8.2我试图打开 JSON 文件并从中读取数据。JSON 文件以 UTF-8 编码,但当我阅读它时,最终字符串似乎被错误地打开为 ANIS。

用记事本++试过:

以 UTF8 格式打开的 JSON 文件:

"úterý, třicátého-prvního, sedumnáct v jedna dvacet dva"

将编码更改为 ANIS:

"úterý, třicátého-prvního, sedumnáct v jedna dvacet dva"

当我将字符串直接复制到 python 文件时,它被正确读取。

我的程序:

  import json  

print('Wrong characters:')
with open('C:/Users/Tony/Desktop/test.json',
                          'r') as jfile:
                        data = json.loads(
                        jfile.read())
print(data)

print('Ok Characters:')
data2 = json.loads('{ "td": { "1": { "as": "úterý, třicátého-prvního, sedumnáct v jedna dvacet dva"}, "2": { "as": "úterý, třicátého-prvního, sedumnáct v třináct dvacet dva"}}}')
print(data2)

print('System settings:')
import sys; print(sys.stdout)

控制台输出:

Wrong characters:
{'td': {'1': {'as': 'ĂşterĂ˝, tĹ™icátĂ©ho-prvnĂ\xadho, sedumnáct v jedna dvacet dva'}, '2': {'as': 'ĂşterĂ˝, tĹ™icátĂ©ho-prvnĂ\xadho, sedumnáct v tĹ™ináct dvacet dva'}}}
Ok Characters:
{'td': {'1': {'as': 'úterý, třicátého-prvního, sedumnáct v jedna dvacet dva'}, '2': {'as': 'úterý, třicátého-prvního, sedumnáct v třináct dvacet dva'}}}
System settings:
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>

test.json 文件

标签: jsonpython-3.xcharacter-encoding

解决方案


如果没有系统的首选编码,就很难进行调试。您可以通过以下方式获得它:

import locale
locale.getpreferredencoding(False)

但我怀疑您的编码不是 ASCII 或 UTF8。从 Python3 开始,open需要一个参数encoding. 您应该尝试指定编码utf-8

import json

with open('example.json', 'r', encoding='utf-8') as f:
    print(json.loads(f.read()))

推荐阅读