首页 > 解决方案 > python json.load 在两个不同的系统上执行不同

问题描述

我有一个我想用 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

我有两个问题:

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

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

标签: jsonpython-3.xascii

解决方案


就我而言,问题是关于LC_CTYPE. 当我设置为 LC_CTYPE="en_US.utf-8" 时,我开始成功读取文件。


推荐阅读