Una excelente presentación que arroja luz sobre algunos “enigmas”: Unicode In Python, Completely Demystified (Kumar McMillan, PyCon 2008, Chicago)
Otros documentos relevantes: http://del.icio.us/fgomez/unicode+python.
>>> # Definimos un string unicode: >>> yo = u'Fernando G\u00f3mez' # U+00F3 = ó = Latin Small Letter O with acute >>> yo u'Fernando G\xf3mez' >>> yo == u'Fernando G\N{Latin Small Letter O with acute}mez' True >>> # En efecto, se trata de un objeto de tipo unicode: >>> type(yo) <type 'unicode'> >>> # Ahora lo convertimos a string de bytes, aplicando dos encodings: >>> yo_latin1 = yo.encode('latin-1') >>> yo_latin1 'Fernando G\xf3mez' >>> yo_utf8 = yo.encode('utf-8') >>> yo_utf8 'Fernando G\xc3\xb3mez' >>> # Verificamos que se trata de otro tipo de objetos: >>> type(yo_latin1) <type 'str'> >>> type(yo_utf8) <type 'str'> >>> # Y volvemos hacia atrás: >>> yo_latin1.decode('latin-1') == yo_utf8.decode('utf-8') == yo True