【发布时间】:2019-09-27 18:02:32
【问题描述】:
在 Python 2 中,我曾经可以这样做:
>>> var='this is a simple string'
>>> var.encode('base64')
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc=\n'
简单!不幸的是,这在 Python 3 中不起作用。幸运的是,我能够在 Python 3 中找到一种替代方法来完成同样的事情:
>>> var='this is a simple string'
>>> import base64
>>> base64.b64encode(var.encode()).decode()
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc='
但这太可怕了!一定有更好的方法!因此,我进行了一些挖掘,并找到了第二种替代方法来完成过去非常简单的任务:
>>> var='this is a simple string'
>>> import codecs
>>> codecs.encode(var.encode(),"base64_codec").decode()
'dGhpcyBpcyBhIHNpbXBsZSBzdHJpbmc=\n'
那就更糟了!我不在乎尾随的换行符!我关心的是,天哪,必须在 Python 3 中成为更好的方法,对吧?
我不是在问“为什么”。我在问是否有更好的方法来处理这个简单的案例。
【问题讨论】:
-
b64encode在 python3 中需要一个类似字节的对象,所以你必须在使用它之前将你的字符串转换为字节数组。 -
检查stackoverflow.com/a/41437531/2209008 以获得有关为什么进行此更改的良好解释。如果你认为它太冗长,只需将其包装成一个函数即可。
-
那么在 Python3 中没有更好的方法可以做到这一点,这就是你的意思吗?
-
我只是好奇,Python3 的方式有什么“可怕的”?事实上你必须先
encode()字节?这只是一个额外的电话,但它仍然在一条线上。
标签: python python-3.x encoding base64 python-2.x