вторник, 21 декабря 2010 г.

Что это за волшебная настройка, которая синтезирует Unicode из не-Unicode?

Это перевод What is this magic setting that synthesizes Unicode from non-Unicode? Автор: Реймонд Чен.

Комментатор dan g. спросил как Windows может обращаться с не-Unicode приложениями как с Unicode приложениями через апплет Региональные и языковые настройки Панели управления (перевод поста), особенно в части, которая даёт вам выбрать язык для не-Unicode программ. "Я всегда считал, что единственным способом показывать, скажем, китайские символы будет компиляция программы в Unicode, но эта настройка, кажется, намного проще".

Эта настройка не так волшебна, как поначалу кажется (в конце концов, у нас была китайская версия 16-битной Windows, которая отлично показывала китайские символы - и она определённо не использовала Unicode, потому что Unicode ещё не изобрели). Майкл Каплан разобрал эту и другие настройки, а из таблицы в начале его поста вы можете видеть, что Windows XP называет это языком для не-Unicode программ, который ранее назывался локалью системы по умолчанию. Старое имя лучше описывает что она на самом деле делает, но хуже описывает, для чего она используется.

В Win32 три кодировки имеют специальный статус. Unicode (более точно - UTF-16), конечно же, то, что использует сама Windows. Также есть две 8-битные кодовые страницы: CP_ACP - так называемая кодовая страница ANSI (даже хотя это не ANSI), и кодовая страница CP_OEM - так называемая кодовая страница OEM (даже хотя она не предоставляется OEM).

Когда не-Unicode программа вызывает функции вроде TextOutA для показа строки в кодовой странице ANSI, то строка конвертируется в Unicode согласно кодовой странице CP_ACP. Настройка языка для не-Unicode программ контролирует, какой реальной странице соответствует CP_ACP. На системах U.S. обычно это кодовая страница 1252, но вы можете изменить её в Панели управления. И здесь-то и становится возможным показывать китайские символы без использования Unicode.

К примеру, кодовая страница 950 является двухбайтовой кодовой страницей, которую часто используют в странах с традиционным китайским. Она может представлять английский алфавит с A-Z, а через использование двухбайтовых символов она также может показывать широкий набор традиционных китайских символов, вроде этого блока символов, который представлен байтовой последовательностью формы от B3 40 до B3 FE. Если кодовая страница ANSI установлена в кодовую страницу 950 и вы передаёте данные отформатированные для этой же кодовой страницы в, скажем, функцию TextOutA, то будут показаны соответствующие китайские символы, даже хотя программа не использует Unicode явно.

Вот почему эта настройка называется языком для не-Unicode программ. Она показывает, в какой набор символов нужно интерпретировать не-Unicode данные.

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

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

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

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

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

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

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