0

我试过了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

4

3 回答 3

3
于 2012-08-05T07:46:23.460 回答
1

如果你有这样的字符串,那么它就坏了。您需要将其编码为 Latin-1 以将其转换为具有相同字节值的字节串,然后解码为 UTF-8。

于 2012-08-05T07:09:16.217 回答
0

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 字符组成的字符串。

如果您得到一个 utf-8 字符串(8 位字符串)错误地显示为 Unicode(16 位字符串),您必须先将其转换为 8 位字符串:

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

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

于 2012-08-05T08:48:57.887 回答