Python's current string objects are overloaded. They serve both to
hold ASCII and non-ASCII character data and to also hold sequences of
raw bytes which have no reasonable interpretation as displayable
character sequences. This overlap hasn't been a big problem in the
past, but as Python moves closer to requiring source code to be
properly encoded, the use of strings to represent raw byte sequences
will be more problematic. In addition, as Python's Unicode support
has improved, it's easier to consider strings as ASCII-encoded Unicode
objects.