Python json.load работает по-разному в двух разных системах - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть файл json, который я пытаюсь прочитать с помощью python3.6.text является одним из ключей в файле json и содержит текст на немецком языке.

Я делаю следующее, чтобы прочитать файл:

import json
file_name='1.json'
file = json.load(open(file_name))

Когда я пытаюсь прочитать его на сервере таким образом, я получаю следующую ошибку:

>>> json.load(open('1.json'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/anaconda3/lib/python3.6/json/__init__.py", line 296, in load
    return loads(fp.read(),
  File "/anaconda3/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 3335: ordinal not in range(128)

Если я пытаюсь сделать это следующим образом, я не получаю никакой ошибки, но не могу правильно видеть символы, отличные от ascii:

    file = json.load(open('1.json',encoding='utf-8'))
    file['text']
    "Ich finde, dass dieser Debatte nicht ausgewichen werden darf, auch
 nicht kann", sagte er in der ARD. Die Bundesregierung habe die Kernenergie
 trotz der Verl\xe4ngerung der Laufzeiten um durchschnittlich zw\xf6lf 
Jahre immer als "Auslaufmodell" betrachtet.\nHelfer in Schutzanz\xfcgen am
 Atommeiler Fukushima

Если я пытаюсь открыть его на своем локальном компьютере, я могу открыть его безлюбая проблема и все символы отображаются правильно:

    file = json.load(open('1.json')
     file['text']
     "Ich finde, dass dieser Debatte nicht ausgewichen werden darf, auch
 nicht kann", sagte er in der ARD. Die Bundesregierung habe die Kernenergie
 trotz der Verlängerung der Laufzeiten um durchschnittlich zwölf Jahre 
immer als "Auslaufmodell" betrachtet.\nHelfer in Schutzanzügen am Atommeiler Fukushima

Во всех средах я использую python 3.6, мой local is osx, тогда как centos запускается на сервере.Когда я проверяю формат файла, я вижу, что это utf-8:

file -i 1.json
1.json: text/plain; charset=utf-8

У меня есть 2 вопроса:

1) Почему я получаю разные варианты поведения с одним и тем же кодом?

2) Как я могу исправить проблему на сервере?

1 Ответ

0 голосов
/ 27 ноября 2018

В моем случае проблема была около LC_CTYPE.Когда я установил LC_CTYPE = "en_US.utf-8", я начал успешно читать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...