json.dumps(pickle.dumps(u'å'))引发UnicodeDecodeError

Mic*_*ael 4 python json pickle

这是一个错误吗?

>>> import json
>>> import cPickle
>>> json.dumps(cPickle.dumps(u'å'))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/json/encoder.py", line 361, in encode
    return encode_basestring_ascii(o)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 1-3: invalid data
Run Code Online (Sandbox Code Playgroud)

Gle*_*ard 6

json模块期望字符串编码文本.腌制数据不是文本,它是8位二进制文​​件.

一个简单的解决方法,如果你真的需要通过JSON发送pickle数据,那就是使用base64:

j = json.dumps(base64.b64encode(cPickle.dumps(u'å')))
cPickle.loads(base64.b64decode(json.loads(j)))
Run Code Online (Sandbox Code Playgroud)

请注意,这显然是一个Python错误.协议版本0 明确记录为ASCII,但是å作为非ASCII字节发送\xe5而不是编码为"\u00E5".上游报告了此错误 - 并且在没有修复错误的情况下关闭了故障单. http://bugs.python.org/issue2980