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

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

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

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

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

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

Комментарии: 16

  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, но и к другим языкам.

  12. Самый Ден

    забыли добавить, что кроме модификатора "u" надо заменить еще "w" на "p{L}p{Nd}" потому, как автор блога писал вначале, w кириллицу (и любую японницу) за буквы не признает.

    А лопатить весь движок для такого функционала приходится, но злость берет :(

    Кстати уже два года как ждем все php6 :)

  13. Самый Ден

    Опа, Иван, добавьте плиз обратные слеши, а то они порезались :(

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

    Вообще-то, \w прекрасно работают для русских букв. А вот что такое p{L} и p{Nd} я, признаться, не знаю...

    (Кусочки кода, чтобы в них ничего не пропадало, можно заключать в ..)

  15. bolk

    Любопытно, я начал сюда писать, когда мы с Ваней были на «вы».

    \p{L} — это «буквы», \P{L} — «не буквы». Это специальные конструкции для Unicode, очень гибкие: http://ru2.php.net/manual/en/regexp.reference.php

    Например, \p{Lu} — это большие буквы (upper), а \p{P} — пункуационный символ. Отличная штука. В PHP они применяются очень широко.

  16. Nikita

    Работают mb_ сюникод и с другими синтаксисами (в мануале всё написано). Но есть свои особенности :)

    http://ua2.php.net/mb_regex_set_options

    i - ONIG_OPTION_IGNORECASE

    x - ONIG_OPTION_EXTEND

    m - ONIG_OPTION_MULTILINE

    s - ONIG_OPTION_SINGLELINE

    p - ONIG_OPTION_MULTILINE | ONIG_OPTION_SINGLELINE

    l - ONIG_OPTION_FIND_LONGEST

    n - ONIG_OPTION_FIND_NOT_EMPTY

    j - ONIG_SYNTAX_JAVA

    u - ONIG_SYNTAX_GNU_REGEX

    g - ONIG_SYNTAX_GREP

    c - ONIG_SYNTAX_EMACS

    r - ONIG_SYNTAX_RUBY

    z - ONIG_SYNTAX_PERL

    b - ONIG_SYNTAX_POSIX_BASIC

    d - ONIG_SYNTAX_POSIX_EXTENDED

    e - eval() resulting code

    Выбирай на любой вкус

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