No, Python does not use its own encoding – it will use any encoding that it has access to and that you specify.
A character in a str
represents one Unicode character. However, to represent more than 256 characters, individual Unicode encodings use more than one byte per character to represent many characters.
bytes
objects give you access to the underlying bytes. str
objects have the encode
method that takes a string representing an encoding and returns the bytes
object that represents the string in that encoding. bytes
objects have the decode
method that takes a string representing an encoding and returns the str
that results from interpreting the byte
as a string encoded in the the given encoding.
For example:
>>> a = "αά".encode('utf-8')
>>> a
b'\xce\xb1\xce\xac'
>>> a.decode('utf-8')
'αά'
We can see that UTF-8 is using four bytes, \xce
, \xb1
, \xce
, and \xac
, to represent two characters.
Related reading:
-
Python Unicode Howto (from the official documentation)
-
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) by Joel Spolsky
-
Pragmatic Unicode by Ned Batchelder