[英]Python JSON loads - wrong encoding of file
in Python 3.8.2
I trying to open the JSON file and read data from it.在Python 3.8.2
我试图打开 JSON 文件并从中读取数据。 JSON file is encoded in UTF-8 but when I read it, final string seems as to by wrongly opened as ANIS. JSON 文件在 UTF-8 中编码,但是当我阅读它时,最终字符串似乎被错误地打开为 ANIS。
Tried with Notepad++:用记事本++试过:
JSON file opened in UTF8: JSON 文件以 UTF8 格式打开:
"úterý, třicátého-prvního, sedumnáct v jedna dvacet dva"
Changed coding to ANIS:将编码更改为 ANIS:
"ĂşterĂ˝, tĹ™icátĂ©ho-prvnĂho, sedumnáct v jedna dvacet dva"
When I copy string directly to python file, it is read properly.当我将字符串直接复制到 python 文件时,它被正确读取。
My program:我的程序:
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)
Console output:控制台 output:
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'>
It's difficult to debug without the preferred encoding of your system.如果没有系统的首选编码,就很难进行调试。 You can get it with:您可以通过以下方式获得它:
import locale
locale.getpreferredencoding(False)
But I suspect that your encoding is not ASCII or UTF8.但我怀疑您的编码不是 ASCII 或 UTF8。 Since Python3, open
takes an argument encoding
.从 Python3 开始, open
需要一个参数encoding
。 You should try to specify the encoding utf-8
.您应该尝试指定编码utf-8
。
import json
with open('example.json', 'r', encoding='utf-8') as f:
print(json.loads(f.read()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.