我收到一个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"
答案 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"'