如何正確使用 Python 3 的 base64 庫

Tags: Python
于 May 12, 2018 编辑

被 base64 給鄙視了(

因爲無聊,給土豆和萌狼接了一個小坑,本想大概幾分鐘就能搞定的,硬是被 base64 庫弄得花了好久。

Python 2 時,encode 只需要 base64.encode('xxx') 即可完成 encode,然而到了 Python 3,會出現以下報錯:

 In [10]   print(base64.b64encode("test"))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-22d896b4cc44> in <module>()
----> 1 print(base64.b64encode("test"))

/usr/lib/python3.6/base64.py in b64encode(s, altchars)
     56     application to e.g. generate url or filesystem safe Base64 strings.
     57     """
---> 58     encoded = binascii.b2a_base64(s, newline=False)
     59     if altchars is not None:
     60         assert len(altchars) == 2, repr(altchars)

TypeError: a bytes-like object is required, not 'str'

好啊,既然要二進制流,那我就加一個 encode:

 In [12]   print(base64.b64encode("test".encode()))
b'dGVzdA=='

這……返回值咋還是二進制流。

然而我一時腦抽😂,寫成了這個樣子:

re.match(r"b'(.*)'", str(base64.b64encode(encodestr.encode()))).group(1)

😂😂😂

經過土豆的指點,纔改成最後這樣子:

base64.b64encode(encodestr.encode()).decode()

最終成品:https://github.com/OriginCode/shadowsocks-libev-qrcode (不忘推銷)

PS: Python 3 的 base64 真難用😂