You are currently viewing Python Convert Bytes to String

You can convert bytes to strings very easily in Python by using the decode() or str() function. Bytes and strings are two data types and they play a crucial role in many applications. However, in some cases, we may need to convert a byte string to a regular string. In this article, we will learn different methods to convert bytes to a string in Python.

Advertisements

The quick answer to convert bytes to a string in Python is to use the decode() or str() function. But there is details to that which we will cover in this article. So let’s get started.

1. Quick Examples of Converting Bytes to String

Below are the most common methods for converting bytes to a string. In the following sections, we will discuss each of these methods in detail with examples.


# Quick examples of converting bytes to string

# Create byte
b = b'sparkByExamples'

# Using the decode() method
s = b.decode('utf-8')

# Using the str() constructor
s = str(b)

# Using the bytes.decode() method
s = bytes.decode(b, 'utf-8')

# Using the bytearray.decode() method
s = b.decode('utf-8')

# Using the codecs.decode() method
import codecs
string = codecs.decode(b, 'utf-8')

2. What are Bytes in Python?

In Python, bytes is a built-in data type that represents a sequence of bytes. A sequence of bytes can represent any kind of data, including text, images, video, and other types of binary data.

Bytes can represent non-ASCII characters, such as emoji. Because emoji and other non-ASCII characters are represented using multiple bytes, they can be difficult to work with when using regular strings.


# Byte string with an emoji character a
byte_string = b'sparkbyexamples \xF0\x9F\x92\x93'

# Print the byte string
print(byte_string)

# Decode the byte string to a regular string
string = byte_string.decode('utf-8')

# Print the regular string
print(string)

Yields below output.

Python convert bytes string

3. Convert Bytes to String using decode()

To convert bytes to strings in Python, use the decode() function. decode() is built-in Python method used to convert bytes to strings. To use the decode() method, you need to specify the character encoding that was used to encode the byte string.

This method is designed specifically to decode byte strings into regular strings and takes into account the character encoding used to encode the byte string.


# Create a byte string using utf-8 encoding
byte_string = b'sparkbyexamples'

# Use utf-8 to decode() the string
string = byte_string.decode('utf-8')

# Print the regular string
print(string)

# Output:
# sparkbyexamples

Below is another example that uses UTF-16 encoding:


# Create a byte string using utf-16 encoding
byte_string = b'\xff\xfes\x00p\x00a\x00r\x00k\x00b\x00y\x00e\x00x\x00a\x00m\x00p\x00l\x00e\x00s\x00'

# Decode the byte string to a regular string
string = byte_string.decode('utf-16')

# Print the regular string
print(string)

# Output:
# sparkbyexaples

Steps to convert bytes to a string using the decode() function in Python:

  1. Find the bytes that you want to convert
  2. Call the decode() method on the byte string and pass the appropriate encoding as an argument.
  3. Assign the decoded string to a variable.
  4. Use the decoded string in your Python code as needed.

You can convert that string back to bytes with UTF-16 encoding using the encode() method:


# Define a string
string = 'sparksbyexamples'

# Encode the string to bytes in UTF-16
byte_string = string.encode('utf-16')

# Print the byte string
print(byte_string)

4. str() – Bytes to String in Python

str() is a built-in Python function that can be used to convert a bytes object to a string object, by passing the bytes object as the first argument and the desired encoding as the second argument.

Syntax of str() for bytes to string conversion:


# Syntax of str()
str(byte_string, 'utf-8')

Converting bytes with UTF-8 encoding using the str() function:


# Create a byte string with a non-ASCII character
byte_string = b'sparkbyexamples is \xf0\x9f\x92\x93'
# Convert byte string to string using UTF-8 encoding
string_utf8 = str(byte_string, 'utf-8')
print(string_utf8)

# Output:
# sparkbyexamples is 💓 (love emoji)

Byte with a smile emoji using UTF-16 encoding to a string:


# smile emoji - UTF-16 encoding
byte_string = b'\xff\xfe(\x00?\x00?\x00)\x00'

# Convert byte string to string 
string_utf16 = byte_string.decode('utf-16')
print(string_utf16)

# Output:
# 😊 (smile emoji)

5. Convert Bytes Array to String

To convert a byte array to a string, you can use the bytes() constructor to create a bytes object from the array, and then use the decode() method to convert the bytes object to a string.


# Create a byte array
byte_array = bytearray([115, 112, 97, 114, 107])

# Convert byte array to string using the UTF-8 encoding
string_utf8 = bytes(byte_array).decode('utf-8')

# Print the string
print(string_utf8)

# Output:
# spark

6. decode() vs str() for Byte Conversion

The decode() method is used to convert a bytes object to a string by decoding it with a specified character encoding. While the str() constructor is a simpler method that can be used to create a string object directly from a bytes object.

Below is the table, showing the major differences between the decode() and str() for conversion of bytes to string:

MethodCharacter encodingFlexibility
decode()Can specify any character encodingMore flexible
str()Limited to standard encodings such as ASCII, UTF-8, UTF-16Less flexible
str() vs decode()

Though, there are multiple methods for converting bytes to string in python, the most recommened way is to use the decode() method.

Following is the performance of the decode() and str() functions for converting a string 1 Million times. It turns out that the str() is a little faster. However, this difference is negligible.


import timeit

# Sample byte data
byte_data = b'sparkbyexamples' * 1000

# Convert using decode() method
def decode_method():
    return byte_data.decode('utf-8')

# Convert using str() constructor
def str_method():
    return str(byte_data, 'utf-8')

# Time the execution of both methods
print('decode():', timeit.timeit(decode_method, number=1000000))
print('str():', timeit.timeit(str_method, number=1000000))

Yields the following output:


decode(): 2.4661002999637276
str(): 1.952021999983117

Frequently Asked Questions on Convert Bytes to String

How do I convert bytes to a string in Python?

To convert bytes to a string in Python, you can use the decode method, specifying the encoding of the byte data. The most common encoding is ‘utf-8’.

What is the decode method used for?

The decode method is used to convert a sequence of bytes into a string. It takes an encoding as an argument, specifying how the bytes should be interpreted. The most common encoding is ‘utf-8’.

Can I convert bytes to a string without knowing the encoding?

It’s generally recommended to know the encoding. However, if you’re uncertain, you can try different encodings or use libraries like chardet to automatically detect the encoding.

How can I handle decoding errors when converting bytes to a string?

To handle decoding errors when converting bytes to a string in Python, you can use the errors parameter with the decode method. The errors parameter allows you to specify how decoding errors should be handled.

Are there other encoding options besides ‘utf-8’?

There are many other encodings such as ‘latin-1’, ‘utf-16’, ‘ascii’, etc. The choice of encoding depends on the data you are working with. Always use the encoding that matches the original encoding of the data.

Can I encode a string back to bytes?

you can encode a string back to bytes in Python using the encode method. This is the reverse process of decoding bytes to a string. For example, string_data is a string, and encode('utf-8') converts it to bytes using UTF-8 encoding. You can choose a different encoding based on your requirements.

Summary and Conclusion

In this article, we have covered different methods to convert bytes to strings in Python. We have discussed the use of the decode() and str() methods, and provided examples of how to use them. We also compared the two methods and highlighted their differences. If you have any questions, feel free to ask in the comments below.

Happy coding!