首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转储json时出现恼人的unicode错误

转储json时出现恼人的unicode错误
EN

Stack Overflow用户
提问于 2014-06-03 13:09:45
回答 3查看 406关注 0票数 0

所以我收到了错误消息:

代码语言:javascript
运行
复制
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

在这些代码中:

代码语言:javascript
运行
复制
with open('amazon_review.json', 'w') as outfile:
  json.dump(amazon_review, outfile)

我会想出办法的。任何帮助都是最好的。

EN

回答 3

Stack Overflow用户

发布于 2014-06-03 13:22:45

Python2不使用Unicode接口,即使它返回Unicode字符串,因此它永远不会正确读取非ANSI字符。

因此,在使用以下代码将其编码回ASCII.Try之前,尝试使用.encode获取Unicode字符串会失败,并显示Unicode​解码​错误。

代码语言:javascript
运行
复制
with open('amazon_review.json', 'w') as outfile:
    try:
        json.dump(amazon_review, outfile)# omit in 3.x!
    except UnicodeEncodeError:
        pass
票数 1
EN

Stack Overflow用户

发布于 2014-06-03 13:25:21

我们可能需要更多地了解您传递给json.dump的数据,但我知道该api支持默认为utf-8encoding kwarg。

你试过像这样的东西吗?

代码语言:javascript
运行
复制
with open('amazon_review.json', 'w') as outfile:
    json.dump(amazon_review, outfile, encoding="utf-16")

看看这个similar issue可能是值得的

票数 1
EN

Stack Overflow用户

发布于 2014-06-04 02:23:33

amazon_review的结构中有一个字节字符串。您应该确保只将Unicode字符串写入您打算用json.dump序列化的结构,因为JSON只能表示基于Unicode的字符串(没有与Python2的str相匹配的字节字符串的概念)。

只要字节字符串只包含ASCII字符,Python就可以处理这个错误,因为可以很好地猜测该字节字符串表示的任何编码都是ASCII超集。但是对于像0xEA这样的顶位字节,它不能猜测,所以在将结果传递到amazon_review之前,您必须通过在字节字符串上调用.decode('whatever-encoding-it-is-in')来告诉它。

如果在您的数据中,0xEA应该表示带有U+00EA的e- ê,那么要尝试的编码应该是'iso-8859-1''windows-1252'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24007524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档