这是Python 2
我的理解是
任何
encode是关于编码从unicode代码点到任何东西(bytes/ascii/utf-8/…)
根据下面的代码
>>> myUtf8
'Hi \xe2\x84\x99\xc6\xb4\xe2\x98\x82\xe2\x84\x8c\xc3\xb8\xe1\xbc\xa4'
>>> myUtf8.decode("ascii", "replace")
u'Hi \ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd'
>>> myUtf8.decode('utf-16')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/encodings/utf_16.py", line 16, in decode
return codecs.utf_16_decode(input, errors, True)
UnicodeDecodeError: 'utf16' codec can't decode byte 0xa4 in position 18: truncated data
问题:
为什么代码点\ufffd
被替换为无法解码的字节?在
编辑:
问题:
协议(例如)正在接收字节。如何查找,字节是用哪种编码表示的?假设这些字节是从网络接收的。在
你的理解是错误的。
decode
是“从作为第一个参数传递给unicode
的编码中表示的字节”;encode
是“从unicode
到作为第一个参数传递的编码中表示的字节”。在在您的示例中,您给出了一些用UTF-8表示的字节,并告诉Python将它们解释为ASCII,然后构建一个
unicode
字符串;如果所有的>;127个字节都不是有效的ASCII,它们被视为垃圾,因此,正如您使用"replace"
参数请求的那样,它们将被Unicode替换字符替换。在相关问题 更多 >
编程相关推荐