我在unicode上浏览了python的tutorial,我有一个简单的问题要问:
当我打开一个python shell并键入:
>>> unicode('\x80abc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal
not in range(128)
由于python试图使用ascii编码将byte\x80转换为unicode,因此我得到了预期的上述错误,ascii编码可以达到127。(\x80是128)。
但是,如果我再次尝试使用utf-8编码,我会再次得到一个错误,尽管有些不同:
>>> unicode('\x80abc', 'utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 0: invalid s
tart byte
这是怎么回事,我该怎么办呢?
最佳答案
首先,'\x80abc'
是一个字节字符串(在Pythonu,然后:u'\x80abc'
),要么假设字节字符串是使用特定编解码器(如ASCII、Latin1、UTF-8等)编码的unicode字符串;然后你就按你所想的去做:解码它。
调用unicode()
是一个显式解码。正如保罗指出的,a\80
在UTF-8中无效,因为它在ASCII中无效。不过,您可以尝试Latin1,因为它允许流中有一个\x80
字节。