CPython's Unicode Story
- unicode and str types (Jython, IronPython only have unicode)
- unicode which contains only ascii and str hash equal, compare equal,
etc. (Not true if str contains anything outside ascii, e.g. UTF-8.)
- unicode + str promotes to unicode
- At program boundaries, e.g. print, socket.send (), cStringIO.StringIO().write, unicode will be transformed according to the terminal encoding if it's being sent to the terminal, or ascii for other cases. If unicode contains non-ascii characters, raise UnicodeEncodeError.