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
This module provides functions for encoding binary data to printable ASCII characters and decoding such encodings back to binary data. This includes the encodings specified in RFC 4648 (Base64, Base32 and Base16), the Base85 encoding specified ...
๐ŸŒ
GeeksforGeeks
geeksforgeeks.org โ€บ python โ€บ encoding-and-decoding-base64-strings-in-python
Encoding and Decoding Base64 Strings in Python - GeeksforGeeks
August 7, 2024 - The below image provides us with a Base64 encoding table. ... In Python the base64 module is used to encode and decode data. First, the strings are converted into byte-like objects and then encoded using the base64 module.
๐ŸŒ
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 Training ... import base64 s = "Linus".encode() b = base64.b64encode(s) print(b) print(base64.b64decode(b).decode()) Try it Yourself ยป
๐ŸŒ
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 - import base64 import json # Example JSON token (as a string) json_token = "" # Step 1: Convert the JSON string to bytes json_bytes = json_token.encode('utf-8') # Step 2: Encode the bytes using Base64 base64_bytes = base64.b64encode(json_bytes) ...
๐ŸŒ
iO Flood
ioflood.com โ€บ blog โ€บ python-base64-encode
Python Base64 Encode | b64encode() Function Guide
February 1, 2024 - The b64encode() function is suitable for general purpose base64 encoding, while urlsafe_b64encode() is ideal when you need to include the encoded data in a URL. In conclusion, Pythonโ€™s base64 module offers a variety of methods for base64 encoding to cater to different needs.
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.

๐ŸŒ
Base64Encode.org
base64encode.org โ€บ enc โ€บ python
Base64 Encoding of "python" - Online
Encode python to Base64 format with various advanced options. Our site has an easy to use online tool to convert your data.
๐ŸŒ
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.
Find elsewhere
๐ŸŒ
Cybrosys Technologies
cybrosys.com โ€บ odoo blogs
Base64 Encoding & Decoding Using Python
The Python base64 module provides an easy way to encrypt and decrypt binary data using the Base64 encoding technique. It is also extremely simple to use.
๐ŸŒ
Base64.Guru
base64.guru โ€บ home โ€บ developers โ€บ python
Python Base64 Encode | Python | Developers | Base64
To encode data in Base64, Python provides the b64encode function of the base64 module.
๐ŸŒ
Base64 Encode
base64encode.net โ€บ python-base64-b64encode
Python base64.b64encode() - Base64 Encode
<<< import base64 <<< encoded = base64.b64encode('base64 encoded string') <<< encoded 'YmFzZTY0IGVuY29kZWQgc3RyaW5n'
๐ŸŒ
Base64
base64.dev โ€บ home โ€บ articles โ€บ base64 in python
Base64 Encoding & Decoding in Python โ€” base64.dev
July 3, 2026 - Key pattern: str โ†’ .encode() โ†’ b64encode() โ†’ .decode() โ†’ str. Always encode your string to bytes before Base64-encoding, and decode the bytes result back to a string afterward.
๐ŸŒ
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.
๐ŸŒ
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.
๐ŸŒ
Real Python
realpython.com โ€บ ref โ€บ stdlib โ€บ base64
base64 | Python Standard Library โ€“ Real Python
Encoding and decoding with the standard Base64 alphabet: ... >>> import base64 >>> base64.b64encode(b"Python is great") b'UHl0aG9uIGlzIGdyZWF0' >>> base64.b64decode(b"UHl0aG9uIGlzIGdyZWF0") b'Python is great'
๐ŸŒ
MojoAuth
mojoauth.com โ€บ binary-encoding-decoding โ€บ base64-with-python
Base64 with Python | Binary Encoding Techniques Across Programming Languages
Python's built-in base64 module makes encoding data straightforward. The primary function you'll use is base64.b64encode().
๐ŸŒ
TutorialsPoint
tutorialspoint.com โ€บ encoding-and-decoding-base64-strings-in-python
Cryptography - Base64 Encoding & Decoding
August 7, 2023 - In this code, we will explore how to use Python's base64 module to encode data in a format that can be transmitted or stored in text-based systems. To encode the message, we will use the method base64.b64encode(). This function converts the ...
๐ŸŒ
AskPython
askpython.com โ€บ python โ€บ examples โ€บ decoding-base64-data
Decoding Base64 Data in Python - AskPython
April 29, 2026 - Base64 is an encoding scheme that converts binary data into ASCII text. It does this by mapping each 6 bits of input to one of 64 characters: uppercase A-Z, lowercase a-z, digits 0-9, plus (+), and forward slash (/). The equals sign (=) is used ...
๐ŸŒ
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 = 'This is the data, in the clear.' print 'Original:', original_string encoded_string = base64.b32encode(original_string) print 'Encoded :', encoded_string decoded_string = base64.b32decode(encoded_string) print 'Decoded :', decoded_string ยท $ python base64_base32.py Original: This is the data, in the clear.
๐ŸŒ
Python Engineer
python-engineer.com โ€บ posts โ€บ base64-module
The base64 Module in Python - Python Engineer
June 21, 2022 - The base64 module provides the b64encode() function. It encodes a bytes-like object using Base64 and returns the encoded bytes.