这些在Python中处理Unicode字符串的方法有什么区别?

2024-09-25 12:31:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了print a_str.decode("utf-8")print uni_strprint uni_str.decode("utf-8")print uni_str.encode("utf-8")。。在

但只有第一个有效。在

 >>> print '\xe8\xb7\xb3'.decode("utf-8")
 跳
 >>> print u'\xe8\xb7\xb3\xe8'
 è·³è
 >>> print u'\xe8\xb7\xb3\xe8'.decode("utf-8")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode
     return codecs.utf_8_decode(input, errors, True)
 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
 >>> print u'\xe8\xb7\xb3\xe8'.encode("utf-8")
 è·³è

我真的很困惑如何用Unicode来显示字符串。如果我有一根这样的绳子: a=u'\xe8\xb7\xb3\xe8',如何打印a?在


Tags: inmostlineutfencodefileuniprint
3条回答

如果你有一根这样的绳子,那它就断了。您需要将其编码为拉丁语-1,以将其转换为具有相同字节值的bytestring,然后解码为UTF-8。在

'\xe8\xb7\xb3'是用utf8编码的汉字,因此'\xe8\xb7\xb3'.decode('utf-8')工作正常,它返回u'\u8df3'的unicode值。但是u'\xe8\xb7\xb3'是一个字面的unicode字符串,它与的unicode不一样。unicode字符串不能是decoded,它是unicode。 最后,a=u'\xe8\xb7\xb3\xe8'实际上不是一个有效的unicode字符串。在

u'\xe8\xb7\xb3'来自哪里?另一个功能?在

[1]查看第一条评论。在

unicode字符串u'\xe8\xb7\xb3\xe8'等效于u'\u00e8\u00b7\u00b3\u00e8'。您需要的是u'\u8df3',它可以在utf8中编码为'\xe8\xb7\xb3'。在

在Python中,unicode是一个UCS-2字符串(构建选项)。因此,u'\xe8\xb7\xb3\xe8'是一个由4个16位Unicode字符组成的字符串。在

如果你先把它转换成一个字符串(168bUTF字符串):

>>> ''.join([chr(ord(a)) for a in u'\xe8\xb7\xb3']).decode('utf8')
u'\u8df3'

注意,'\xe8\xb7\xb3\xe8'不是有效的utf8字符串,因为最后一个字节'\xe8'是两字节序列的第一个字符,不能终止utf8字符串。在

相关问题 更多 >