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.



Содержание раздела