Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии Windows


Одно- и двухбайтовые наборы символов


В двухбайтовом наборе символ представляется либо одним, либо двумя байтами. Так, для японской каны, если значение первого байта находится между 0x81 и 0x9F или между 0xE0 и 0xFC, надо проверить значение следующего байта в строке, чтобы определить полный символ. Работа с двухбайтовыми наборами символов — просто кошмар для программиста, так как часть их состоит из одного байта, а часть — из двух.

Простой вызов функции strlen не дает количества символов в строке — она возвращает только число байтов. В ANSI-библиотске С нет функций, работающих с двухбайтовыми наборами символов. Но в аналогичную библиотеку Visual C++ включено множество функций (типа _mbslen), способных оперировать со строками мультибайтовых (как одно-, так и двухбайтовых) символов.

Для работы с DBCS-строками в Windows предусмотрен целый набор вспомогательных функций:

Функция

Описание

PTSTR CharNext (PCTSTR pszCurrentChar);

Возвращает адрес следующего символа в строке

PTSTR CharPrep(PCTSTR pszStart, PCTSTR pszCurrentChar);

Возвращает адрес предыдущего символа в строке

BOOL IsDBCSLeadByte (BYTE bTestChar);

Возвращает TRUE, если данный байт — первый в DBCS-символе

Функции CharNext и CharPrev появоляют «перемещаться» по двухбайтовой строке
единовременно на 1 символ вперед или назад, a IsDBCSLeadByte возвращает TRUE, если
переданный ей байт — первый в двухбайтовом символе

Хотя эти функции несколько облегчают работу с DBCS-строками, необходимость
в ином подходе очевидна. Перейдем к Unicode




Начало  Назад  Вперед



Книжный магазин