Ubuntu上的Python 3.5.1
for
到目前为止,一切都符合预期。但是当我尝试使用ROT13编码时,我得到:
>>> from codecs import decode
>>> s = 'string'
>>> b = b'bytes'
>>> decode(b, 'utf8')
'bytes'
>>> decode(s, 'utf8')
Traceback (most recent call last):
File "/usr/lib/python3.5/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
TypeError: a bytes-like object is required, not 'str'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: decoding with 'utf8' codec failed (TypeError: a bytes-like object is required, not 'str')
正如@snakecharmerb指出的那样ROT13 en / decode只能用于字符串 尽管如此消息仍然是错误的,因为它声明,即使实际传递了类似字节的对象,也会出现类似字节的对象,并提到用户没有创建的字典。
答案 0 :(得分:1)
关于ROT13编解码器,Python 3.5 docs state:
以下编解码器提供文本转换:str到str映射。 str.encode()不支持它(它只产生字节 输出)。
也就是说,在编码到ROT13时,你只能传递unicode字符串(str
个对象),而你只会得到str
个对象。
这与Python 2.x不同,当ROT13被视为与其他编解码器相同时。 ROT13最初没有移植到Python 3,因为ROT13不会将unicode字符串编码为字节 - 它只是交换字母。它作为恢复,作为Python 3.2和3.4中的文本转换。完整的故事在this bug report。