Преобразование строк из/в Unicode
В дополнение к посту о funny characters.
Преобразование utf-8 в cp866 (в ASCII кодировку)
>>> u'ы'.encode('cp866')
'\xeb'
Преобразование cp866 в utf-8
>>> 'ы'.decode('cp866')
u'\u044b'
decode - декодирует последовательность байтов в юникод, encode - кодирует юникод в последовательность байтов. Последовательность байтов всегда должна интерпретироваться с учетом кодировки - в примере получаются последовательности байтов в кодировке cp866. :)
PS. А в Python 3 концепция работы с юникодом круче, как обещает документация :)
Cтрока (str) - всегда UTF-8, то есть действительно строка, в универсальной кодировке. А все остальное - последовательности байт bytes, про которые нужно знать, в какой они кодировке, если нужно их перевести в строку.