为什么 python-3.x 删除了 ROT-13 作为编码?

cs9*_*s95 3 python encoding rot13 python-2.7 python-3.x

使用 python-2.7,您可以非常轻松地使用以下命令实现 rot-13 Ceasar Cipher

>>> 'abcdefghijklmnopqrstuvwxyz'.encode('rot-13')
'nopqrstuvwxyzabcdefghijklm'
Run Code Online (Sandbox Code Playgroud)

您甚至可以在CPython 存储库的 Zen of Python 代码中找到它。

然而,python3.6 上的相同代码给出了 -

>>> 'abcdefghijklmnopqrstuvwxyz'.encode('rot-13')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: 'rot-13' is not a text encoding; use codecs.encode() to handle arbitrary codecs
Run Code Online (Sandbox Code Playgroud)

如果我想使用rot-13python3.x 中的编码,我需要导入codecs.

>>> import codecs
>>> codecs.encode('abcdefghijklmnopqrstuvwxyz', 'rot-13')
'nopqrstuvwxyzabcdefghijklm'
Run Code Online (Sandbox Code Playgroud)

当然,这确实是一个小问题,我不介意导入codecs来实现凯撒密码(无论如何它是内置的)。我只是想知道这个设计决策背后是否有任何潜在的理由。也许原因很简单,“rot-13 并不是真正的编码”,我不知道。

如果有人能对此有所了解,我很想听听!

Kar*_*hoo 5

您还可以查看此页面,其中有人将您的问题标记为错误。对于那些不想浏览该网站及其后续链接的人,Python 提交者的简单响应如下:

“由于 rot_13 是转码器,而不是编码器,因此错误消息是正确的,函数的修复也是正确的。但是,由于模块中的 encodings.rot_13 和 rot13 函数都没有记录,(甚至在 2.7 中也没有记录) ,我想知道该函数和 if __name__; 子句是否是古老的遗留物,应该删除。”