我有一个像'u'\ u00000958'这样的值从数据库返回,我想把这个字符串转换为utf8
。我尝试这样的事情:
cp = u'\\U00000958'
value = cp.decode('unicode-escape').encode('utf-8')
print 'Value: " + value
我收到此错误:
UnicodeDecodeError:'ascii'编解码器无法解码字节0xe0的位置 0:序数不在范围内(128)
如何正确转换此值?
更多细节。我在2.7.10中使用ucs2。
答案 0 :(得分:0)
对于unicode问题,通常有助于指定python 2与python 3,以及如何获得特定表示。
从第一句中不清楚实际值是什么,而不是它的显示方式。目前还不清楚value like u'\\U00000958'
是一个1字符的unicode字符串,一个10字符的unicode字符串,一个14字符(ascii)字节字符串,还是其他东西。使用len
和type
可以确保您拥有的内容。
通过尝试解码cp
,您暗示您知道cp
是字节,但是编码是什么?错误消息表明它不是ascii字节。 0xe0是utf-8编码的典型起始字节。以下互动
>>> s = "u'\\U00000958'"
>>> se = eval(s)
>>> se
u'\u0958'
>>> se.encode(encoding='utf-8')
'\xe0\xa5\x98'
>>>
向我建议,以\ xe0开头的cp是3个utf-8编码字节,而u'\\U00000958'
是其unicode解码的可评估表示。