Иван Сагалаев

15.06.06 08:48

Python, Юникод

Юлик написал про свою любимую тему последнего времени -- юникод. На этот раз он предлагает посмеяться то ли над Trac, то ли над Django. То ли над "теми, кто считает что в Python хороший unicode support".

Мне думается, что такой пост способен ввести многих в заблуждение и создать неверный миф, поэтому я хочу уточнить: в Питоне на самом деле хорошая поддержка юникода. Там есть:

Другими словами, такая поддержка юникода многим распространенным языкам и не снилась.

Другое дело, что поддержка юникода в Питоне не идеальна. В первую очередь тем, что она не работает "сама" или "автоматически", а про нее приходится думать. И именно из-за этого люди в ascii-язычном мире часто делают софт на Питоне, который с другими языками не работает, потому что большую часть времени разработки они не в курсе, что он не работает :-). Так, кстати, случилось, и с Django: когда он только выпустился, там были места, где длина строки в utf-8 считалась как len(value) без предварительной раскодировки в юникод. Но зато из-за того, что это Питон, все эти места оказалось возможным просто починить. А не ждать много лет, когда, наконец, хоть кто-нибудь напишет всю нужную многоязычную инфраструктуру.

Надо сказать, что сам Юлик тоже хотел внести лепту в улучшение отношений Django с юникодом. Но его патч, к сожалению, покинули. Как это часто, к сожалению, в Django бывает.

Но как бы то ни было... Заявлять отстойность языка только на основании того, что на нем написана программа с багом (вот редкость-то!) -- это просто несерьезно, IMHBCO.

Комментарии: 11 (feed)

  1. BOLK

    По поводу PHP вы неправы. Там есть функции работы с Unicode-строками (в виде модуля с префиксом mb_*), причём стандартные вызовы PHP можно заменить на вызовы mb_* автоматически, штатными средствами.

    PCRE тоже работает с Unicode-строками - есть специальный ключ. Другое дело, что PHP не делает это нативно и тут есть свои проблемы (например, функция basename, которая отделяет имя файла не будет нормально работать), но в PHP6 ситуация должна измениться.

  2. mkdir

    +1

  3. Алексей Захлестин

    а в PHP6, если верить всё тому-же Julik'у будет как раз самая правильная из возможных поддержек Unicode

  4. Иван Сагалаев

    Это отрадно!

    Кстати, к новой большой версии и Питон избавится от байтовых строк, останутся только unicode. Как раз то, к чему все и призывают.

  5. Лёхха

    Никогда не испытывал проблем с юникодом. Наверно живу в однобайтовом сером мире ASCII =)

  6. Climenty

    В php5 действительно есть mb, только регулярные выражения в этой библиотеке реализованы в posix формате. Горе тому, кто решится это использовать.
    Ждем php6.

  7. Alex Zhukov

    ага, подождем-подождем php6 - а потом он окажется таким-же мыльным пузырем как и php5.

  8. Julik

    Ну ладно уж подстебнуться нельзя ;-)

  9. BOLK

    2Climenty:

    PRCE в PHP поддерживают Unicode. Для работы с Unicode можно и нужно использовать их, а не mb_ereg*

  10. BOLK

    2Alex Zhukov:

    что значит "таким же мыльным пузырём как и php5"? Что вам не понравилось в PHP5? В нём достаточно много изменений для смены цифры.

  11. Hinikato

    Насчет регулярных выражений в PHP. Если надо использовать UTF-8, то достаточно добавить после ограничителей модификатор u и будет вам счастье. Например:

    preg_match('{выражение}u', $where, $pockets);
    

    u - должна быть именно маленькая u, а не большая. Вообще я вижу такую проблему - люди осуждают язык (например, PHP), не разобравшись с ним. По-моему, это можно делать только узнав его в совершенстве и поняв все его минусы и плюсы. А рассуждения о том, что он в чем-то плох обычно ведется некомпетентными товарищами, которые нахватались основ.

    Это применительно не только к PHP, но и к другим языкам.

Добавить комментарий

Вы можете подписать комментарий своим OpenID-логином или именем с EMail'ом.

OpenID

Имя и EMail

Текст через пустую строку превращается в отдельные абзацы, цитата отделяется символами > слева, списка состоит из пунктов с дефисом слева, курсив выделяется * с каждой стороны, жирный - двойными **, блоки кода отступают слева на 4 пробела