使用python 3.6解码utf-8字符串

时间:2018-01-20 05:06:33

标签: python utf-8 decoding

我试图解码我成功编码的utf-8字符串,但无法弄清楚如何解码它... 实际上它解码得很好,但我只是想把它连接起来:

b = base64.b64decode(a).decode("utf-8", "ignore")
print('Decoding:'+b)
正如我做的那样编码

a = str(base64.b64encode(bytes('hasni zinda ha u are my man boy yes u are ', "utf-8")))
print('Encoding :'+a)

每当我尝试按照我想要的方式进行操作时,它会给我一个错误:

File "C:/Users/…/python/first.py", line 8, in <module>
  b = base64.b64decode(a).decode("utf-8", "ignore")
File "C:\Users\…\AppData\Local\Programs\Python\Python36-32\lib\base64.py", line 87, in b64decode
  return binascii.a2b_base64(s) binascii.Error: Incorrect padding

任何人都可以帮我解决一下吗?

1 个答案:

答案 0 :(得分:1)

对我comment above的跟进。

解码Base64编码的字符串时,必须反转操作顺序:

>>> s = "hasni zinda ha u are my man boy yes u are "
# Encode the Python str into bytes.
>>> b = s.encode("utf-8")
# Base64 encode the bytes.
>>> s_b64 = base64.b64encode(b)
>>> print("Encoding: " + str(s_b64))
Encoding: b'aGFzbmkgemluZGEgaGEgdSBhcmUgbXkgbWFuIGJveSB5ZXMgdSBhcmUg'

现在您已经编码了字符串,解码的工作顺序相反:

# Base64 decode the encoded string into bytes.
>>> b = base64.b64decode(s_b64)
# Decode the bytes into str.
>>> s = b.decode("utf-8")
print("Decoding: " + s)
Decoding: hasni zinda ha u are my man boy yes u are 

有关详情,请参阅b64encode()b64decode()的文档,以及Base64的Output padding部分(确保Base64编码字符串的长度可被4整除所需) )。

使用你的双线:

>>> a = base64.b64encode(bytes("hasni zinda ha u are my man boy yes u are ", "utf-8"))
>>> print("Encoding:", a)
Encoding: b'aGFzbmkgemluZGEgaGEgdSBhcmUgbXkgbWFuIGJveSB5ZXMgdSBhcmUg'
>>> b = base64.b64decode(a).decode("utf-8")
>>> print("Decoding:", b)
Decoding: hasni zinda ha u are my man boy yes u are