пятница, 14 мая 2010 г.

Отстаньте от моего [нижнего] регистра! (или: регистр, часть первая)

Это перевод Get off my [lower] case! (or: Casing, the 1st). Автор: Майкл Каплан.

"Trying a case the second time is like eating yesterday morning’s oatmeal." -- Lloyd Paul Stryker
Конечно же, когда Stryker сказал это, он имел ввиду правовую юриспруденцию. Но, верите вы мне или нет, эта цитата также может быть применена к алфавитным операциям с регистром!

По причинам, которые выше моего понимания, многие разработчики пишут код, который приводит строку к верхнему регистру сразу после приведения её к нижнему или наоборот - задействуя, таким образом, два однонаправленных проецирования символов. Часто они делают это, когда пытаются скопировать действия файловой системы NTFS с именами файлов, у которой, как им кажется, нет никаких проблем с этим проецированием. Это немного глупо, потому что файловая система работает, используя только приведение к верхнему регистру. Из-за этого, единственная операция, которая может привести к другому поведению кода таких разработчиков, - это приведение к нижнему регистру.

Эта проблема наиболее остро стоит в одной конкретной ситуации (той, которая, кажется, случается часто, когда люди сочетают указанный выше неправильный метод с чрезмерным тестированием). В принципе, вопрос в том, что грузинский язык провел много лет в стандарте Unicode с двумя закодированными алфавитами, несмотря на то, что существует три алфавита. По состоянию на Unicode 4.1, планируется, наконец, добавить этот третий алфавит и обеспечить двустороннее отображение между двумя старыми алфавитами (заглавный хуцури и новый строчный нусхури), оставляя современный (мхедрули) алфавит полностью регистронезависимым (грузинское письмо).

Итак, поскольку мхедрули всегда был регистронезависимым, согласно Unicode, то он в порядке. Нам же, в Microsoft, не так повезло, потому что начиная с Windows 2000 у Microsoft было создано одностороннее проецирование с верхнего регистра хуцури на мхедрули, но не было обратного. Это не являлось проблемой для NTFS (которая делает только приведение к верхнему регистру), но те разработчики, которые делают обе операции, получат неверные результаты.

(очевидно, что удаление этого кривого отображения, когда мы будем создавать новое проецирование для Unicode 4.1, будет хорошим делом как для Windows, так и для .NET Framework. Я расскажу об этом больше, когда сам узнаю...)

Мораль истории? Если вы хотите эмулировать файловую систему, то пропустите шаг, который пропускает файловая система - никакого нижнего регистра!

Будущие посты о регистре будут говорить о других забавных и не очень фактах, проблемах и возможностях Windows и .NET Framework.

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

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

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

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

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

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

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