Python JSON загружается - неправильная кодировка файла - PullRequest
0 голосов
/ 10 апреля 2020

in Python 3.8.2 Я пытаюсь открыть файл JSON и прочитать данные из него. Файл JSON закодирован в UTF-8, но когда я его читаю, кажется, что окончательная строка неправильно открывается как ANIS.

Пробовал с помощью Блокнота ++:

JSON Файл, открытый в UTF8:

"ú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 файл

1 Ответ

1 голос
/ 10 апреля 2020

Сложно отлаживать без предпочтительной кодировки вашей системы. Вы можете получить это с помощью:

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()))
...