json - Python JSON加载 - 文件编码错误
问题描述
在Python 3.8.2
我试图打开 JSON 文件并从中读取数据。JSON 文件以 UTF-8 编码,但当我阅读它时,最终字符串似乎被错误地打开为 ANIS。
用记事本++试过:
以 UTF8 格式打开的 JSON 文件:
"ú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'>
解决方案
如果没有系统的首选编码,就很难进行调试。您可以通过以下方式获得它:
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()))
推荐阅读
- angular - 有没有合适的方法来连接以下可观察的链?
- api - 通过api将批量数据上传到branch.io
- javascript - 根据在选择/下拉框中而不是复选框中选择的值动态获取和显示地图图层
- java - 在Java中,我应该如何命令一个二维点沿着距离矢量线移动到另一个点?
- r - 从两个数据帧中采样相同数量的不平衡类
- apache-spark - 为什么 Spark Dstream 的 foreachRDD 在由于异常而停止之前会继续处理更多的微批处理?
- python - 主键和外键 Django Rest Framework 的嵌套 JSON 输出
- c# - 如何防止 C# WinForm listview 选择 Change when key is press and list view auto find next row on the based on the first column
- multithreading - 使用 .net 5 与任务(不是线程)的 TCP 连接
- python - 我如何制作 TinyDB 文件