2013-10-08 122 views
1

我正在接收JSON字符串,将它传递给json.loads并以unicode字符串数组结尾。这一切都很好。一个数组中的字符串是:打印已解码的JSON字符串

u'\xc3\x85sum' 

现在使用的解码(“utf-8”)解码,而是我得到一个错误时,应翻译成“ASUM”:

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 

所以这工作得很好,但如果我把它做一个Unicode字符串作为json.loads没有我得到了同样的错误:

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

你已经有一个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"' 
+0

这工作,谢谢! – user2858835