воскресенье, 23 мая 2010 г.

Снова про кодировки.

Прочитал статью. Насчет кодировок в голове всё становится яснее и яснее=) До этого момента в консоль на английском языке сообщения выводил, не хотел связываться. Оказывается всё просто - необходимо получить из строки объект типа юникод и написать print объект.  И совсем необязательно вытворять танцы с кодом типа decode('utf8').encode('cp866').

6 комментариев:

  1. О, вот за это сенки!!
    Бывает, что один и тот же скрит на двух разных компах с одинаковым питоном и одинаковой виндой не пашет из-за кодировок :(
    Ща тож почитаю ;)

    ОтветитьУдалить
  2. Ога, ога.
    Хоть бы не позорились.
    Статья полна неточностей, хотя бы относительно того, что unicode это не кодировка, а некое абстрактное представление строки касательно таблицы юникод-символов, которое может быть легким движением руки преобразовано в любую из кодировок, поддерживаемых питоном.

    Насчет того что скрипты не пашут из-за кодировок, то предыдущий автор перегнул. Не стоит прогонять, сделайте все правильно, и проблем не будет никогда
    В частности, все что попадает внутрь вашей программы должно переводиться в юникод. Это обязательно.

    А дальше, если необходимо безопасно выводить содержимое файлов в консоль, да еще и кроссплатформенно, то существует костыль.

    import sys
    unicode_string = u"ііііііі"
    print unicode_string.encode(sys.stdout.encoding, "replace")

    Да, в указанном выше примере, если вы не сделаете encode(sys.stdout.encoding, "replace") то увидите, как питон-скрипт может спокойно ложиться (под виндой), и ваш u"ііііііі" юникод вас не спасет, ибо таких символов просто-напросто нету в cp866. Так что, если необходимо и безопасно и кроссплатформенно выводить данные в консоль, то махинации никто не отменял....

    ОтветитьУдалить
  3. А вот нахрена первые два предложения в твоем посте? Самооценка занижена, повышаешь таким образом? Какая бы статья ни была, я из неё узнал что-то новое.

    ОтветитьУдалить
  4. да уж, странный тип, экспрессивный =)
    Обычно скрипты пишутся для себя, и особо не еб**шь себе мозг со всякими "костылями".

    ОтветитьУдалить
  5. тож бывало с юникодом ебля. особенно если собираешь данные из разных источников видел решения этого в виде функций lazy_unicode(). в джанго есть force_unicode

    ОтветитьУдалить
  6. Юникод в питоне это как гнойный прыщ на жопе.

    Можно сделать так:

    sys.stdout = codecs.getwriter('UTF-8')(sys.stdout)

    ОтветитьУдалить