转储json时恼人的unicode错误

时间:2014-06-03 05:09:45

标签: python unicode

所以我收到了错误消息:

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)

我能搞清楚。任何帮助都会很棒。

3 个答案:

答案 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)

我们可能需要更多地了解您传入json.dump的数据,但我知道api支持默认为encoding的{​​{1}} kwarg。

你有没有试过像

这样的东西
utf-8

看这个similar issue

可能值得

答案 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'