Прочитал
статью. Насчет кодировок в голове всё становится яснее и яснее=) До этого момента в консоль на английском языке сообщения выводил, не хотел связываться. Оказывается всё просто - необходимо получить из строки объект типа юникод и написать print объект. И совсем необязательно вытворять танцы с кодом типа
decode('utf8').encode('cp866').
О, вот за это сенки!!
ОтветитьУдалитьБывает, что один и тот же скрит на двух разных компах с одинаковым питоном и одинаковой виндой не пашет из-за кодировок :(
Ща тож почитаю ;)
Ога, ога.
ОтветитьУдалитьХоть бы не позорились.
Статья полна неточностей, хотя бы относительно того, что unicode это не кодировка, а некое абстрактное представление строки касательно таблицы юникод-символов, которое может быть легким движением руки преобразовано в любую из кодировок, поддерживаемых питоном.
Насчет того что скрипты не пашут из-за кодировок, то предыдущий автор перегнул. Не стоит прогонять, сделайте все правильно, и проблем не будет никогда
В частности, все что попадает внутрь вашей программы должно переводиться в юникод. Это обязательно.
А дальше, если необходимо безопасно выводить содержимое файлов в консоль, да еще и кроссплатформенно, то существует костыль.
import sys
unicode_string = u"ііііііі"
print unicode_string.encode(sys.stdout.encoding, "replace")
Да, в указанном выше примере, если вы не сделаете encode(sys.stdout.encoding, "replace") то увидите, как питон-скрипт может спокойно ложиться (под виндой), и ваш u"ііііііі" юникод вас не спасет, ибо таких символов просто-напросто нету в cp866. Так что, если необходимо и безопасно и кроссплатформенно выводить данные в консоль, то махинации никто не отменял....
А вот нахрена первые два предложения в твоем посте? Самооценка занижена, повышаешь таким образом? Какая бы статья ни была, я из неё узнал что-то новое.
ОтветитьУдалитьда уж, странный тип, экспрессивный =)
ОтветитьУдалитьОбычно скрипты пишутся для себя, и особо не еб**шь себе мозг со всякими "костылями".
тож бывало с юникодом ебля. особенно если собираешь данные из разных источников видел решения этого в виде функций lazy_unicode(). в джанго есть force_unicode
ОтветитьУдалитьЮникод в питоне это как гнойный прыщ на жопе.
ОтветитьУдалитьМожно сделать так:
sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)