base64 encoding takes 8-bit binary byte data and encodes it uses only the characters A-Z, a-z, 0-9, +, /* so it can be transmitted over channels that do not preserve all 8-bits of data, such as email.

Hence, it wants a string of 8-bit bytes. You create those in Python 3 with the b'' syntax.

If you remove the b, it becomes a string. A string is a sequence of Unicode characters. base64 has no idea what to do with Unicode data, it's not 8-bit. It's not really any bits, in fact. :-)

In your second example:

>>> encoded = base64.b64encode('data to be encoded')

All the characters fit neatly into the ASCII character set, and base64 encoding is therefore actually a bit pointless. You can convert it to ascii instead, with

>>> encoded = 'data to be encoded'.encode('ascii')

Or simpler:

>>> encoded = b'data to be encoded'

Which would be the same thing in this case.


* Most base64 flavours may also include a = at the end as padding. In addition, some base64 variants may use characters other than + and /. See the Variants summary table at Wikipedia for an overview.

Answer from Lennart Regebro on Stack Overflow
🌐
Python
docs.python.org › 3 › library › base64.html
base64 — Base16, Base32, Base64, Base85 Data Encodings
For more information about the strict base64 check, see binascii.a2b_base64() May assert or raise a ValueError if the length of altchars is not 2. ... Encode bytes-like object s using the standard Base64 alphabet and return the encoded bytes.
🌐
GeeksforGeeks
geeksforgeeks.org › python › encoding-and-decoding-base64-strings-in-python
Encoding and Decoding Base64 Strings in Python - GeeksforGeeks
August 7, 2024 - Decoding Base64 string is exactly opposite to that of encoding. First we convert the Base64 strings into unencoded data bytes followed by conversion into bytes-like object into a string. The below example depicts the decoding of the above example encode string output.
🌐
Stack Abuse
stackabuse.com › encoding-and-decoding-base64-strings-in-python
Encoding and Decoding Base64 Strings in Python
September 4, 2023 - Without using 'rb', Python would assume we are reading a text file. We then use the read() method to get all the data in the file into the binary_file_data variable. Similar to how we treated strings, we Base64 encoded the bytes with base64.b64encode and then used the decode('utf-8') on base64_encoded_data to get the Base64 encoded data using human-readable characters.
Top answer
1 of 5
363

base64 encoding takes 8-bit binary byte data and encodes it uses only the characters A-Z, a-z, 0-9, +, /* so it can be transmitted over channels that do not preserve all 8-bits of data, such as email.

Hence, it wants a string of 8-bit bytes. You create those in Python 3 with the b'' syntax.

If you remove the b, it becomes a string. A string is a sequence of Unicode characters. base64 has no idea what to do with Unicode data, it's not 8-bit. It's not really any bits, in fact. :-)

In your second example:

>>> encoded = base64.b64encode('data to be encoded')

All the characters fit neatly into the ASCII character set, and base64 encoding is therefore actually a bit pointless. You can convert it to ascii instead, with

>>> encoded = 'data to be encoded'.encode('ascii')

Or simpler:

>>> encoded = b'data to be encoded'

Which would be the same thing in this case.


* Most base64 flavours may also include a = at the end as padding. In addition, some base64 variants may use characters other than + and /. See the Variants summary table at Wikipedia for an overview.

2 of 5
252

Short Answer

You need to push a bytes-like object (bytes, bytearray, etc) to the base64.b64encode() method. Here are two ways:

>>> import base64
>>> data = base64.b64encode(b'data to be encoded')
>>> print(data)
b'ZGF0YSB0byBiZSBlbmNvZGVk'

Or with a variable:

>>> import base64
>>> string = 'data to be encoded'
>>> data = base64.b64encode(string.encode())
>>> print(data)
b'ZGF0YSB0byBiZSBlbmNvZGVk'

Why?

In Python 3, str objects are not C-style character arrays (so they are not byte arrays), but rather, they are data structures that do not have any inherent encoding. You can encode that string (or interpret it) in a variety of ways. The most common (and default in Python 3) is utf-8, especially since it is backwards compatible with ASCII (although, as are most widely-used encodings). That is what is happening when you take a string and call the .encode() method on it: Python is interpreting the string in utf-8 (the default encoding) and providing you the array of bytes that it corresponds to.

Base-64 Encoding in Python 3

Originally the question title asked about Base-64 encoding. Read on for Base-64 stuff.

base64 encoding takes 6-bit binary chunks and encodes them using the characters A-Z, a-z, 0-9, '+', '/', and '=' (some encodings use different characters in place of '+' and '/'). This is a character encoding that is based off of the mathematical construct of radix-64 or base-64 number system, but they are very different. Base-64 in math is a number system like binary or decimal, and you do this change of radix on the entire number, or (if the radix you're converting from is a power of 2 less than 64) in chunks from right to left.

In base64 encoding, the translation is done from left to right; those first 64 characters are why it is called base64 encoding. The 65th '=' symbol is used for padding, since the encoding pulls 6-bit chunks but the data it is usually meant to encode are 8-bit bytes, so sometimes there are only two or 4 bits in the last chunk.

Example:

>>> data = b'test'
>>> for byte in data:
...     print(format(byte, '08b'), end=" ")
...
01110100 01100101 01110011 01110100
>>>

If you interpret that binary data as a single integer, then this is how you would convert it to base-10 and base-64 (table for base-64):

base-2:  01 110100 011001 010111 001101 110100 (base-64 grouping shown)
base-10:                            1952805748
base-64:  B      0      Z      X      N      0

base64 encoding, however, will re-group this data thusly:

base-2:  011101  000110  010101 110011 011101 00(0000) <- pad w/zeros to make a clean 6-bit chunk
base-10:     29       6      21     51     29      0
base-64:      d       G       V      z      d      A

So, 'B0ZXN0' is the base-64 version of our binary, mathematically speaking. However, base64 encoding has to do the encoding in the opposite direction (so the raw data is converted to 'dGVzdA') and also has a rule to tell other applications how much space is left off at the end. This is done by padding the end with '=' symbols. So, the base64 encoding of this data is 'dGVzdA==', with two '=' symbols to signify two pairs of bits will need to be removed from the end when this data gets decoded to make it match the original data.

Let's test this to see if I am being dishonest:

>>> encoded = base64.b64encode(data)
>>> print(encoded)
b'dGVzdA=='

Why use base64 encoding?

Let's say I have to send some data to someone via email, like this data:

>>> data = b'\x04\x6d\x73\x67\x08\x08\x08\x20\x20\x20'
>>> print(data.decode())
   
>>> print(data)
b'\x04msg\x08\x08\x08   '
>>>

There are two problems I planted:

  1. If I tried to send that email in Unix, the email would send as soon as the \x04 character was read, because that is ASCII for END-OF-TRANSMISSION (Ctrl-D), so the remaining data would be left out of the transmission.
  2. Also, while Python is smart enough to escape all of my evil control characters when I print the data directly, when that string is decoded as ASCII, you can see that the 'msg' is not there. That is because I used three BACKSPACE characters and three SPACE characters to erase the 'msg'. Thus, even if I didn't have the EOF character there the end user wouldn't be able to translate from the text on screen to the real, raw data.

This is just a demo to show you how hard it can be to simply send raw data. Encoding the data into base64 format gives you the exact same data but in a format that ensures it is safe for sending over electronic media such as email.

🌐
Medium
medium.com › @ume.cooray › understanding-base64-encoding-in-python-5b31f23dd007
Understanding Base64 Encoding and Decoding in Python | by Umayangana Cooray | Medium
March 18, 2025 - Let’s walk through the following ... json_bytes = json_token.encode('utf-8') # Step 2: Encode the bytes using Base64 base64_bytes = base64.b64encode(json_bytes) # Step 3: Convert the encoded bytes back to a string (optional) ...
🌐
DEV Community
dev.to › tooleroid › base64-encoding-in-python-simplified-guide-examples-nan
Base64 Encoding in Python: Simplified Guide & Examples - DEV Community
December 16, 2024 - def safe_encode_decode(text: str) -> tuple[str, str]: try: encoded = base64.b64encode(text.encode()).decode() decoded = base64.b64decode(encoded).decode() return encoded, decoded except UnicodeEncodeError: print("Error: Unable to encode text") ...
🌐
iO Flood
ioflood.com › blog › python-base64-encode
Python Base64 Encode | b64encode() Function Guide
February 1, 2024 - This function accepts binary data as input and returns a base64 encoded byte string. ... import base64 data = b'Hello, World!' encoded_data = base64.b64encode(data) print(encoded_data) # Output: # b'SGVsbG8sIFdvcmxkIQ==' In this example...
🌐
Python Engineer
python-engineer.com › posts › base64-module
The base64 Module in Python - Python Engineer
June 21, 2022 - import base64 data = "Python is ...bmcgbGFuZ3VhZ2U= In the above example, first we convert the input string to byte-like objects and then encode those byte-like objects to base64 format....
Find elsewhere
🌐
Rip Tutorial
riptutorial.com › encoding and decoding base64
Python Language Tutorial => Encoding and Decoding Base64
import base64 s = "Hello World!" b = s.encode("UTF-8") e = base64.b64encode(b) print(e) ... which is still in the bytes object. To get a string out of these bytes, we can use Python's decode() method with the UTF-8 encoding:
🌐
W3Schools
w3schools.com › python › ref_module_base64.asp
Python base64 Module
Python Examples Python Compiler Python Exercises Python Quiz Python Challenges Python Practice Problems Python Server Python Syllabus Python Study Plan Python Interview Q&A Python Bootcamp Python Training ... import base64 s = "Linus".encode() b = base64.b64encode(s) print(b) print(base64.b64decode(b).decode()) Try it Yourself »
🌐
Base64 Encode
base64encode.net › python-base64-b64encode
Python base64.b64encode() - Base64 Encode
<<< import base64 <<< encoded = base64.b64encode('base64 encoded string') <<< encoded 'YmFzZTY0IGVuY29kZWQgc3RyaW5n' https://github.com/base64encode/examples/blob/master/base64encode.py · Python base64.b64decode · Image to Base64 · File to Base64 · PDF to Base64 ·
🌐
Python Module of the Week
pymotw.com › 2 › base64
base64 – Encode binary data into ASCII characters - Python Module of the Week
import base64 original_string = ... because the number of bits in the original string was not evenly divisible by 24 in this example. $ python base64_b64decode.py Original: This is the data, in the clear....
🌐
Educative
educative.io › answers › how-to-use-base64b64encode-in-python
How to use base64.b64encode() in Python
The base64.b64() function in Python encodes byte-like objects and returns the encoded bytes.
🌐
AskPython
askpython.com › python › examples › decoding-base64-data
Decoding Base64 Data in Python - AskPython
April 29, 2026 - It replaces + with – and / with _. Description: Decode URL-safe base64 strings that use – and _ instead of + and /. import base64 urlsafe_encoded = "SGVsbG8-V29ybGQh" decoded = base64.urlsafe_b64decode(urlsafe_encoded) print(decoded.dec...
🌐
TutorialsPoint
tutorialspoint.com › encoding-and-decoding-base64-strings-in-python
Cryptography - Base64 Encoding & Decoding
August 7, 2023 - To encode the message, we will use the method base64.b64encode(). This function converts the data into a format that is safe for transmission over systems that handle only text. It is a simple example for understanding the concept of Base64 encoding.
🌐
Base64.Guru
base64.guru › home › developers › python
Python Base64 Encode | Python | Developers | Base64
Example #3 (encode data into a custom Base64 alphabet): from base64 import b64encode data = '<<???>>' print(b64encode(data)) #-> 'PDw/Pz8+Pg==' print(b64encode(data, '-_')) #-> 'PDw_Pz8-Pg==' Example #4 (fix the “SyntaxError: bytes can only contain ASCII literal characters” error on Python 3):
🌐
Base64encoder
base64encoder.io › python
https://www.base64encoder.io/python/
We cannot provide a description for this page right now
🌐
GitHub
gist.github.com › juliensalinas › 15789d241f28b1ce45f0c22e11ba894a
Encoding a file in base 64 in Python · GitHub
Encoding a file in base 64 in Python · Raw · base64_encode.py · This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
🌐
Envato Tuts+
code.tutsplus.com › home › coding fundamentals › oop
Base64 Encoding and Decoding Using Python | Envato Tuts+
April 11, 2022 - The first thing we have to do in order to use Base64 in Python is to import the base64 module: ... In order to encode the image, we simply use the function base64.b64encode(s).