использование str( text )
является несколько плохой идеей на самом деле, когда вы не можете быть на 100% уверены как в кодировке вашего питона по умолчанию, так и в точном содержании строки - последнее типично для текста, получаемого из Интернета. также, в зависимости от того, что вы хотите сделать, использование print text.encode( 'utf-8' )
или print repr( text.encode( 'utf-8' ) )
может привести к неутешительным результатам, поскольку вы можете получить рендеринг, полный нечитаемых кодовых точек, таких как \x3a
.
Я думаю, что оптимальным вариантом будет воспользоваться командной строкой, поддерживающей юникод (сложно под windows, легко под linux) и перейти с python 2.x на python 3.x. простота и ясность обработки текста и байтов, обеспечиваемая новой серией Python 3, - действительно одно из больших преимуществ, которые вы можете ожидать. это означает, что вам придется потратить немного времени на изучение различий между «байтами» и «текстом» и понять концепцию кодировки символов, но тогда это время будет гораздо лучше потрачено в среде Python 3, поскольку новый подход Python к этим досадные проблемы гораздо яснее и менее подвержены ошибкам, чем Python 2. я бы зашел так далеко, что назвал подход Python 2 к unicode проблематичным в ретроспективе, хотя раньше я думал о нем как о превосходном - когда я сравнивал его с способом, которым эта проблема обрабатывается в php .
edit Я только что остановился на соответствующем обсуждении здесь, на SO, и нашел этот комментарий о том, как php в наши дни решает проблемы юникода / кодирования:
Это как мышь, пытающаяся съесть
слон. Создав Юникод как
расширение ASCII (у нас нормально
строки и у нас есть mb_strings) это
все оборачивается неправильно, и
зацикливается на том, что особые случаи
требуется иметь дело с персонажами с
смешные загогулины, которым нужно больше
один байт Если вы относитесь к Unicode как
предоставляя абстрактное пространство для любого
символ, который вам нужен, ASCII
размещены в этом без необходимости
рассматривать это как особый случай.
Я цитирую это здесь, потому что, по моему опыту, 90% всех тем SO Python + Unicode, кажется, происходят от людей, которые привыкли к ascii или, возможно, latin-1, укушенные случайным персонажем, который не был поддержан обычные настройки, а то в принципе просто хочется от этого избавиться. то, что вы делаете, когда переходите на python 3, - именно то, что предлагает вышеупомянутый комментатор: вместо того, чтобы рассматривать юникод как раздражающее расширение ascii, вы начинаете рассматривать ascii (и почти любую другую кодировку, с которой вы когда-либо встречаетесь) как подмножество ) Unicode.
Если быть правдой, Unicode v6, конечно, не последнее слово в кодировках, но оно настолько близко к универсальности, насколько это возможно в 2011 году. Привыкайте к нему.