简体   繁体   English

Python JSON 加载 - 文件编码错误

[英]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'>

test.json file测试.json文件

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM