Манипулирование строками и преобразование наборов символов
Наборы символов представляют собой таблицы преобразования, которые превращают строки байт в строки символов, придавая им определенный смысл. Интерпретация символьных данных зависит не только от их содержания, но и от выбранного набора символов. В интерфейсе Win32 API обеспечивается поддержка следующих трех наиболее важных наборов: ANSI, OEM и Unicode. По умолчанию набор символов ANSI используется в Windows 9.x, OEM — в MS-DOS, a Unicode — Windows NT/2000. В связи с тем что данные могут быть исходно получены на любой из указанных выше платформ, приложение должно быть готово к преобразованию данных из исходного представления в собственный набор символов.
Функции манипулирования строками интерфейса Win32 API чувствительны к выбранному в настоящий момент набору символов. Эти функции дают программе возможность правильно обращаться к содержимому строк, проверять тип данного символа и изменять его регистр. Кроме того, в состав интерфейса Win32 API входят функции, которые обычно используются для преобразования строки, представленной одним набором символов, в другой.
Еще одним важным элементом интерфейса Win32 API является поддержка региональной установки. В главе 21 уже рассматривался ряд важных элементов региональной установки, касающихся временного пояса и языка. В этой главе наиболее полно исследуется применение региональных установок в системе поддержки национального языка (National Language Support — NLS) — такое название получило подмножество интерфейса Win32 API, которое имеет отношение к региональным условным обозначениям. Приложения, в которых используются свойства NLS, более плавно переносятся на международный рынок сбыта.
Преобразования наборов символов в Windows
Оба набора символов OEM (предусматриваемый изготовителями комплектного оборудования) и ANSI (определенный Американским национальным институтом стандартов) являются производными от набора символов в коде ASCII. Набор символов ASCII (Американский стандартный код обмена информацией) представляет собой набор 7-разрядных символов, который предшествовал появлению микрокомпьютеров. В усовершенствованный набор символов ANSI входят символы иностранного языка и математические знаки. Набор символов OEM, кроме того, содержит графические символы, которые дают возможность без труда рисовать символьные окна в программах, работающих в текстовом режиме MS-DOS.
Как следует из рис. 22.1 и 22.2, между символами иностранного языка в обоих указанных наборах символов имеются некоторые отличия. Числовой эквивалент символа на этих рисунках рассчитывается путем сложения индекса, находящегося в верхней строке, с индексом, расположенным с левой стороны. Например, код прописной буквы "А" в обеих таблицах равен 41 в шестнадцатиричном представлении. Коду BE в таблице OEM соответствует символ подчеркивания, тогда как в таблице ANSI ему соответствует знак "три четвертых" ("3/4").
В 1989 г. комитет ANSI опубликовал стандарт С, в котором учитываются требования международного характера. Одним из новых принципов данного стандарта является поддержка многобайтовых наборов символов (MBCS). В наборе символов MBCS символ может быть представлен 1 или 2 байтами. Многобайтовые наборы символов используются для представления идеографических символов японского, корейского и китайского алфавита. Многобайтовые наборы символов иногда еще называются двухбайтовыми наборами символов (double-byte character sets — DBCS), однако этот термин употребляется неверно, поскольку многие символы на самом деле оказываются длиной лишь в 1 байт. В действительности однобайтовые символы из набора DBCS имеют совершенно те же значения, что и в наборе символов ANSI.
Для начальных символов в наборе MBCS описаны пределы, которые означают, что следующий (или конечный) байт также составляет символ. Именно таким образом и проводится различие между однобайтовыми и двухбайтовыми символами в потоке символьных данных. Подобную проверку по отношению к любому отдельному байту в потоке данных выполняет функция IsDBCSLeadByte. Пределы изменения начальных байтов хранятся в дескрипторах кодовых страниц наряду с символами замены, используемыми по умолчанию во время преобразования однобайтовых символов в многобайтовые. В связи с тем что проверка байтов из входного потока должна выполняться в строке посимвольно, многобайтовые наборы символов оказываются не очень эффективными. Примерами наборов символов MBCS могут служить японский промышленный стандартный набор символов (Japanese Industry Standard — JIS) для японского иероглифического письма (Kanji) (японская кодовая страница 932), корейский стандартный набор символов (RCS 560), а также тайваньский стандартный набор символов (ТСА).
Набор символов Unicode (называемый также кодированием набора символов расширенной формы) является более эффективным набором, поскольку каждый символ в нем занимает 2 байта. При наличии 25000 символов, определенных в описании Unicode 1.1, в этом наборе имеется отдельное место буквально для каждого символа
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.