среда, 26 мая 2010 г.

Что там у нас с корейской (unicode) сортировкой?

Это перевод Whats up with the Korean (Unicode) sort? Автор: Майкл Каплан.

Этот разговор был у меня чуть более двух лет назад в Нидерландах, в конце последнего дня на конференции. Быть может, он повторён не слово в слово, хотя я действительно думаю, что он очень близок (я не записывал его). Печеньки были Pepperidge Farm Mint Milanos, но я не люблю мяту (я люблю сорта без мяты, и я не уверен, откуда они тогда у меня взялись - возможно, было ошибкой упоминать, что они мне не нравятся).

Ох, и имя женщины, с которой я говорил, в действительности не Андреа; мне просто нравится это имя...

Я: Андреа, хочешь печеньку?
Андреа: Вообще-то, я хотела бы узнать, что такое "Korean Unicode sort".
Я: Я бы лучше дал тебе одну из этих печенек. Они действительно вкусные. А, кроме того, они менее неловки, чем ответ на твой вопрос.
Андреа: Я знаю, что ты ненавидишь мяту, ты так сказал вчера на ланче. Ну же, Майкл!
(Короткая пауза)
Андреа: Или Майк? Или, быть может, Мишка, как в твоих e-mail-ах?
Я: Лучше Майкл.
Андреа: Окей, никаких русских медведей. Так что расскажи мне, почему это корейская сортировка такая смущающая? Я нигде не могу найти её определение, разве что я увидела смутную подсказку в настройке 'Unicode collation' из SQL Server 7.0, которая может стоять в Korean. Это оно, не?
Я: Нет, это совсем не то. Хотя SQL Server имеет свою "Korean Unicode collation", но она соответствует используемой в Windows.
Андреа: Грррр. Майкл, не беси меня. Что такое корейская сортировка? Та, что используется в SQL Server, та, что используется в Windows, та, что обозначена в заголовочниках. Что всё это такое?
Я: Ну, это практически та же сортировка, что мы используем в английском.
Андреа: Почти? И насколько же близко это "почти"? Звучит как хоум-ран (прим.пер.: home-run в бейсболе), но какой именно? Это хоум-ран, который страйк-аут, или же хоум-ран, который трипл?
Я: Уф! Ну, если ты хочешь так, то это был страйк-аут.
(Я смущенно улыбаюсь в этот момент)
Я: Мы переместили один символ.
Андреа: Один символ?
Я: Один символ.
Андреа: И что же это был за символ? Что-то оскорбляющее правительство? Что, Microsoft разгневала корейского премьера или что-то такое?
Я: Нет, ничего такого. Это U+005c, "REVERSE SOLIDUS" - обратный слэш. Также известный как бэк-слэш. Ничего оскорбляющего.
Андреа: Так, кто-то из нас чего-то не понимает, Майкл. Наверное, тебе лучше дать мне печеньку.
(Она ест одну печеньку и пытается отдать коробку мне, но я отрицательно мотаю головой)
Андреа: Так что, пожалуйста, объясни мне, почему это простой обратный слэш был перемещён для Кореи.
Я: Ну, потому что в корейском, это так же и знак Won ().
Андреа: Вчера, в своей речи ты сказал, что в Unicode есть место для миллиона символов. Неужели там нет места для Won?
Я: А, ну конечно там есть отдельный знак Won на позиции U+20a9. Просто так получилось, что в большинстве Корейских шрифтов символ, который выглядит как Won, располагают в позиции U+005c, а поскольку символы (отдельный Won и Won-слэш) выглядят идентично, то мы сделали так, чтобы при сортировке они выводились бы рядом.
Андреа: Окей, это я поняла. Но почему тогда эта сортировка называется Корейская (Unicode) сортировка? Это же какая-та древность, которая применима к Корейской (ANSI) сортировке, разве нет?
Я: Ну, в ANSI нет корейского, и там нет Won.
Андреа: Ты прекрасно понял, что я имела ввиду, Майкл. Ты всегда такой раздражительный, когда говоришь с девушкой?
Я: Ох, я... я сейчас между двумя девушками.
Андреа: Я удивляюсь, почему...
Я: Эй-эй!
(У Андеа сейчас очень лукавая усмешка)
Андреа: Просто шучу. Но вчера я поздно легла, и ты уже дал мне печеньки, так что у меня нет реальной необходимости заигрывать, когда я дразнила тебя сейчас.
Я: Хм-м, никому и никогда не нужно было для этого причины. Во всяком случае, я понял, что ты хотела сказать. Вероятно, имело бы больше смысла привязать всё к корейскому стандарту, за исключением этого кодирования, а не сортировки. Что они в основном делают - располагают Won в позиции 0x5c в их стандарте кодирования, так что MS просто пытается быть согласованным с ними. Было бы очень странно пытаться привязаться к KSC-5601.
Андреа: Да, я вижу. Так, что насчёт остальных Хангыль, Ханчча, Чамо и прочих, которые используются корейцами?
Я: Ну, я думаю, что теперь ты понимаешь, почему их убрали из Windows - потому что они мало что делают для корейского.
Андреа: Но она всё ещё существует в SQL Server. Они не получили заметку?
Я: Я знаю, ты думаешь, что я воротила в Microsoft, но это не так. Я был приглашен на работу там, но я еще даже не начал. И я определенно не в курсе, что они там делают в SQL Server.
Андреа: Не нужно раздражаться, дорогой. Я понимаю. Я прошу прощения, что думала, что ты значим.
(В этот момент я корчу гримасу)
Андреа: Ладно, и я извиняюсь, что дразнила тебя. Но вернёмся к нашим корейцам... у тебя есть предположение?
Я: Да, конечно. Не знаю только, прав ли я.
Андреа: Ну и?
Я: Я думаю, что есть серьёзные опасения по поводу обратной совместимости и порядков сортировки в SQL Server, и они просто не могут убрать что-то так просто, даже если это бесполезно. Я думаю, что они могли бы реализовать её как хак, поскольку она реально отличается только одним символом, но команда SQL Server-а всегда была против хаков. Я уважаю их за это.
Андреа: Тогда я тоже. Вероятно, это хотя бы стоит появления статьи в KB.
Я: Может быть. Если в PSS придут клиенты, вопрошая, куда это делась старая-добрая 0x00010412, я предложу создать статью.
(Она ест ещё одну печеньку)
Андреа: Ладно. Я извиняюсь за монополизирование твоего времени.
Я: Не волнуйся, группа уже ушла, а конференция почти закончилась. Чёрт, я бы вылетел уже сегодня ночью, если бы был бы рейс. Ты можешь пойти с нами ночью, если хочешь. Ну, если мы куда-то выберемся сегодня.
Андреа: Вообще-то, ты можешь пойти с нами. Мои друзья более социальны, чем твои.
Я: Да, наверно, это так. И больше, чем я.
Андреа: Ещё один вопрос и мы можем вернуться к тому, что осталось от группы.
Я: Окей. Что за вопрос?
Андреа: Что такое "Japanese (Unicode) sort"?

Не нужно говорить, что разговор к этому моменту закончился. Но Андреа прикончила печеньки. А я погулял с четырьмя друзьями Андреа и выпил больше, чем мне следовало. Полет домой был труднее с похмелья, а, если честно, то пока я не сел, чтобы попытаться вспомнить весь разговор, я должен был довести до конца PSS.

Может, запись в блоге достаточно хороша для этого? :-)

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

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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