添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Base64 shenanigans in Python

Published
Updated

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

This error occurs when you try to base64 encode or decode a string instead of an appropriate bytes-like object. This is a common issue and originates from when Python changed some of its string mechanics from version 2 to 3. To solve this, make sure you are handling the casting correctly, summarized below.

Encoding a String using Base64 in Python

You can base64 encode a string in Python by first converting it into its appropriate bytes and then using the b64encode method:

import base64 # This is the string you want to encode to base64 my_string = 'Hello World' # First, encode the string into its respective bytes using the encode method. # This can be set as ascii, uti-8, utf-16, utf-32 my_bytes = my_string.encode('utf-8') # Next, use the base64 encode method to encode the bytes to base64 base64_bytes = base64.b64encode(my_bytes) # Finally, you can convert the bytes to a string again if needed: base64_string = str(base64_bytes) print(base64_string)

You can also take this a step further and eliminate the need to encode the string to bytes by prepending the string with a byte indicator like so:

my_bytes = b'Hello World'
base64_string = str(base64.b64encode(my_bytes))
print(base64_string)

Decoding a String using Base64 in Python

Decoding a base64 string works similar to encoding. Just be sure not to mix up strings with byte strings!

import base64 # This is the string you want to decode my_string = 'SGVsbG8gV29ybGQ=' # First, transform the string into its respective bytes my_bytes = my_string.encode('utf-8') # Next, use the base64 decode method to decode the bytes to base64 base64_bytes = base64.b64decode(my_bytes) # Finally, you can convert the bytes to a string again if needed: decoded_string = str(base64_bytes)