所以我收到了错误消息:
Traceback (most recent call last):
File "make.py", line 48, in <module>
json.dump(amazon_review, outfile)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 189, in dump
for chunk in iterable:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 434, in _iterencode
for chunk in _iterencode_dict(o, _current_indent_level):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 408, in _iterencode_dict
for chunk in chunks:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 313, in _iterencode_list
yield buf + _encoder(value)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xea in position 173: invalid continuation byte
关于这些代码:
with open('amazon_review.json', 'w') as outfile:
json.dump(amazon_review, outfile)
我能搞清楚。任何帮助都会很棒。
答案 0 :(得分:1)
Python 2不使用Unicode接口,即使它返回Unicode字符串,因此它永远不会正确读取非ANSI字符。
因此尝试对.encode进行编码失败,并尝试获取Unicode字符串,然后再将其编码回ASCII。尝试使用此编码。
with open('amazon_review.json', 'w') as outfile:
try:
json.dump(amazon_review, outfile)# omit in 3.x!
except UnicodeEncodeError:
pass
答案 1 :(得分:1)
答案 2 :(得分:0)
在amazon_review
的结构中有一个字节字符串。您应该确保只将Unicode字符串写入要与json.dump
串行化的结构,因为JSON只能表示基于Unicode的字符串(没有字节字符串的概念来匹配Python 2的str
)
只要字节字符串只包含ASCII字符,Python就可以应对错误,因为很好的猜测字节字符串表示的任何编码都是ASCII超集。但对于像0xEA这样的顶级位设置字节,它无法猜测,因此在将结果传递给.decode('whatever-encoding-it-is-in')
之前,必须通过调用字节串上的amazon_review
来告诉它。
如果您的数据中的0xEA应该代表U + 00EA e-with-circumflex ê
,那么要尝试的编码可以是'iso-8859-1'
或'windows-1252'
。