我正在使用Python,不幸的是我的代码需要将表示字符串的utf-8代码的字符串转换为原始字符串,如:
我从其他代码获得的UTF-8代码字符串:
\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5
我需要将其转换回原始字符串。怎么做?
答案 0 :(得分:16)
我认为这就是你想要的。它不是UTF-8字节字符串(从技术上来说,它是,但只是因为ASCII是UTF-8的子集)。
>>> s='\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5'
>>> print s.decode('unicode-escape')
欢迎提交微博搜索使用反馈,请直接
仅供参考,这是UTF-8:
>>> s.decode('unicode-escape').encode('utf8')
'\ XE6 \ XAC \ XA2 \ xe8 \ XBF \ x8e \ XE6 \ X8F \ X90 \ XE4 \ XBA \ XA4 \ xe5 \ XBE \ XAE \ xe5 \ x8d \ x9a \ XE6 \ X90 \ x9c \ XE7 \ XB4 \ XA2 \ XE4 \ XBD \ XBF \ XE7 \ X94 \ xa8 \ xe5 \ X8F \ x8d \ xe9 \ xa6 \ X88 \ XEF \ XBC \ x8c \ xe8 \ XAF \ XB7 \ XE7 \ x9b \ XB4 \ XE6 \ x8e \ xa5 “
答案 1 :(得分:2)
如果我理解这个问题,我们有一个简单的字节字符串,其中包含Unicode转义,或者类似的东西:
a = '\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5'
In [122]: a
Out[122]: '\\u6b22\\u8fce\\u63d0\\u4ea4\\u5fae\\u535a\\u641c\\u7d22\\u4f7f\\u7528\\u53cd\\u9988\\uff0c\\u8bf7\\u76f4\\u63a5'
因此我们需要使用Unicode代码点手动解析字符串中的unicode值:
\u6b22 => unichr(0x6b22) # 欢
或最后:
print "".join([unichr(int('0x'+a[i+2:i+6], 16)) for i in range(0, len(a), 6)])
欢迎提交微博搜索使用反馈,请直接
答案 2 :(得分:-1)
Mark Pilgrim在他的书中解释过这一点。看看
http://www.diveintopython.net/xml_processing/unicode.html
>>> s = u"\u6b22\u8fce\u63d0\u4ea4\u5fae\u535a\u641c\u7d22\u4f7f\u7528\u53cd\u9988\uff0c\u8bf7\u76f4\u63a5"
>>> print s.encode("utf-8")
>>> 欢迎提交微博搜索使用反馈,请直接