我的代码中有以下几行
outs = codecs.getwriter('utf-8')(sys.stdout)
# dJSON contains JSON message with non-ASCII chars
outs.write(json.dumps(dJSON,encoding='utf-8', ensure_ascii=False, indent=indent_val))
我得到以下异常:
outs.write(json.dumps(dJSON,encoding='utf-8', ensure_ascii=False, indent=indent_val))
File "/usr/lib/python2.7/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 204, in encode
return ''.join(chunks)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 27: ordinal not in range(128)
通过在json.dumps
语句中指定encoding='utf-8'
,我避免了这类问题。为什么我还是会犯错?
根据前面的回答,您可以使用
utf8
与utf-8
来解决这个问题,但它不包括“copy-paste-this”修复。这是复制粘贴修复;p
your_unicode_result = json.dumps(your_dict, encoding="utf8", ensure_ascii=False)
有一个解决方法:传递
utf8
编码(而不是utf-8
!)转储方法。在这种情况下,它将强制所有字符串首先解码为unicode
,您可以使用unicode字符串和已经编码为UTF-8的字符串的混合。为什么有效?因为在JSONEncoder
的源代码中有这样一个东西:这是我们所需要的,这是不可能的。但是当我们将编码改为
utf8
(这与utf-8
完全相同的UTF-8)时,我们强制定义这个_encoder
,并且一切正常:)我的猜测是
dJSON
对象不包含纯unicode,但它包含unicode和已编码为utf-8
的字符串的混合,例如,这将失败但这是可行的(所有的unicode)
尽管这也有效(所有字符串)
相关问题 更多 >
编程相关推荐