使用ROT13在codecs.decode中可能存在错误

时间:2016-03-28 16:13:11

标签: python python-3.x encoding

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只能用于字符串 尽管如此消息仍然是错误的,因为它声明,即使实际传递了类似字节的对象,也会出现类似字节的对象,并提到用户没有创建的字典。

1 个答案:

答案 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