【发布时间】:2018-04-28 23:36:37
【问题描述】:
尝试使用 utf 目录 (utf-8-sig) 使用此代码对 json 文件进行编码
data =json.load(open("data.json", encoding = "utf-8-sig"))
但似乎编码参数被忽略并抛出此错误
Traceback (most recent call last):
File "app1.py", line 11, in <module>
print(k,v)
UnicodeEncodeError: 'ascii' codec can't encode character '\xb0' in position 141: ordinal not in
range(128)
编辑:文件 data.json 的数据类型是<class '_io.TextIOWrapper'>,这是完整的堆栈:
import json
data =json.load(open("data.json", encoding = "utf-8-sig"))
for k,v in data.items():
print(k,v)
Edit2:使用print(open("data.json"), "rb").read(180)的文件的二进制样本
b'{"废弃工业用地": ["不能用于任何 目的,被污染物污染。”],“废弃车辆”: [“一辆在环境中被丢弃的车辆”
【问题讨论】:
-
你确定这是失败的路线吗?你能发布完整的堆栈跟踪吗?
-
@tdelaney,刚刚发布了我打开“data.json”时的完整堆栈和数据类型
-
尝试仅测试读取:
tmp = open("data.json", encoding = "utf-8-sig").read(256)。发布文件的二进制样本也很有趣(可能是print(open("data.json"), "rb").read(180)) -
如果问题是加载数据,那将是
decode错误。sys.stdout.encoding是什么?只是想弄清楚编码(而不是解码)发生在哪里以及为什么它是 ascii。 -
那是你的问题。您不能在 ascii 终端上打印非 ascii 数据。您可以自己解码并替换吗?对于未知字符。
标签: python json python-3.x encoding