首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python-3.x将ROT-13作为编码删除?

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

Stack Overflow用户
提问于 2018-03-23 06:24:46
回答 3查看 1.4K关注 0票数 3

使用python-2.7,您可以很容易地实现rot-13 Ceasar密码

代码语言:javascript
复制
>>> 'abcdefghijklmnopqrstuvwxyz'.encode('rot-13')
'nopqrstuvwxyzabcdefghijklm'

你甚至可以在CPython存储库中Python代码的禅宗中找到它。

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

代码语言:javascript
复制
>>> '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

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

代码语言:javascript
复制
>>> import codecs
>>> codecs.encode('abcdefghijklmnopqrstuvwxyz', 'rot-13')
'nopqrstuvwxyzabcdefghijklm'

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

如果有人能把这件事弄清楚,我很想听听!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-23 06:34:59

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

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

票数 5
EN

Stack Overflow用户

发布于 2018-03-23 06:27:49

快速搜索“pythonrot-13中的新内容”可以找到以下内容:https://docs.python.org/3/whatsnew/3.4.html#codec-handling-improvements

在Python3.4中,解释器能够识别标准库中提供的已知非文本编码,并在适当时引导用户使用这些通用的方便函数:。.decode(“十六进制”)回溯(最近一次调用):LookupError中的第1行:‘十六进制’不是文本编码;使用codecs.decode()处理任意编解码器>>> "hello".encode("rot13")跟踪(最近调用的最后一次):File“文件”,第1行LookupError中的'rot13‘不是文本编码;使用codecs.encode()处理任意编解码器

显然,这是一种清理操作,用于将实际的文本编码(您可以在open(file, encoding="foo")调用中使用)与其他编码分离开来。

票数 3
EN

Stack Overflow用户

发布于 2018-03-23 06:34:34

Python将rot13移动到(如您所说的)编解码器。我的猜测是更好地反映什么是rot13,并使用不同和更通用的界面。正如TimPietzcker所说,最有可能的是清理并尝试将类似的功能分组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49443607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档