Strings vs Bytes in Python

There are significant differences between the concepts of strings and bytes in Python 3. It is critical to recognize this distinction. In Python 3, a string is a sequence of Unicode characters, whereas bytes are a series of raw 8-bit data. It is critical to understand this because you cannot just treat a string as an array of ASCII eight-bit integers. So, let us put this into practice. I've defined two variables, b and s. So, b is a byte sequence, while s is a string. I may also print each one to see what their values are.

def main():
    #defining some values here
    b=bytes([0x41, 0x42, 0x43, 0x44])
    print(b)

    s="This is a string"
    print(s)

if __name__== "__main__":
    main()

And output will be like:

b'ABCD'
This is a string

Process finished with exit code 0

We want to combine the values of b and s together. If we do "print(s+b)" here, the program is going to error out with a TypeError.

It also specifies that it must be str rather than bytes. That's because the print function requires me to give it a string, which I can't just mix with bytes. This is true even when the byte values represent ASCII characters. I can't just treat it as a string; I have to decode the bytes into a string. And I can accomplish that with the built-in "decode" function.

def main():
    #defining some values here
    b=bytes([0x41, 0x42, 0x43, 0x44])
    s="This is a string"
    s2=b.decode('utf-8')
    print(s+s2)


if __name__== "__main__":
    main()

And our output will look like this:

This is a stringABCD

Process finished with exit code 0