打印解码的JSON字符串

时间:2013-10-08 13:54:18

标签: python json unicode utf8-decode

我收到一个JSON字符串,通过json.loads传递它,并以unicode字符串数组结束。这一切都很好。数组中的一个字符串是:

u'\xc3\x85sum'

现在应该在使用decode('utf8')解码时转换为'Åsum',但我得到一个错误:

UnicodeEncodeError: 'charmap' codec can't encode character u'\x85' in position 1: character maps to <undefined>

为了测试我的错误,我做了以下

'Åsum'.encode('utf8') 
'\xc3\x85sum'

print '\xc3\x85sum'.decode('utf8')
Åsum

所以这很好,但是如果我把它作为json.loads的unicode字符串,我会得到同样的错误:

print u'\xc3\x85sum'.decode('utf8')
UnicodeEncodeError: 'charmap' codec can't encode character u'\x85' in position 1: character maps to <undefined>

我尝试过做json.loads(jsonstring,encoding ='uft8'),但没有改变。

有办法解决吗?使json.loads不能使其成为unicode,或者使用'utf8'进行解码,因为我要求它。

编辑:

我收到的原始字符串看起来像这样,或导致麻烦的部分:

"\\u00c3\\u0085sum"

1 个答案:

答案 0 :(得分:1)

您已经拥有Unicode值,因此尝试解码它会首先使用默认编解码器强制编码

看起来您收到了格式错误的JSON; JSON值已经 unicode。如果你的Unicode值中有UTF-8数据,唯一的恢复方法是编码为Latin-1(将前255个代码点一对一映射到字节),然后从那里解码为UTF8:

>>> print u'\xc3\x85sum'.encode('latin1').decode('utf8')
Åsum

更好的解决方案是修复JSON源;它不应该加倍编码为UTF-8。正确的表示形式是:

json.dumps(u'Åsum')
'"\\u00c5sum"'