json - 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)如何解决服务器上的问题?
解决方案
就我而言,问题是关于LC_CTYPE
. 当我设置为 LC_CTYPE="en_US.utf-8" 时,我开始成功读取文件。
推荐阅读
- drupal-8 - 如何在drupal8中实现邮政编码和城市的依赖下拉菜单?
- java - 存在 JNI API 调用时的 JUnit 测试覆盖率
- python - 在 Django 中保存多对多字段的实例
- python - 将 DataFrame.from_records 添加到现有的 df
- while-loop - 如何通过在函数中使用 while 循环返回包含异常的数组的总和?
- python - 我无法显示标题、公司、位置、日期。我试过 end='',但它不起作用
- java - Fat Jar 导出:找不到“logging/bin/default”的类路径条目
- javascript - 如何从轮播中的图像以表单形式提交信息
- reactjs - 如何在reactjs的输入字段内添加测量单位
- javascript - 动态参数的 URL 正则表达式匹配