python json.load在两个不同的系统上执行不同

时间:2018-11-26 21:04:11

标签: json python-3.x ascii

我有一个python3.6试图读取的json文件。 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,我的本地系统是osx,而centos在服务器上运行。当我检查文件格式时,我看到它是utf-8:

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

我有2个问题:

1)为什么我使用完全相同的代码会得到不同的行为?

2)如何解决服务器上的问题?

1 个答案:

答案 0 :(得分:0)

就我而言,问题出在LC_CTYPE上。当我设置为LC_CTYPE =“ en_US.utf-8”时,我开始成功读取文件。