Написание, сопоставление и сортировка символов EUDC и PUA
Приложения записывают определяемые пользователем символы (EUDC) и символы области частного использования (PUA) на экран или принтер так же, как и другие символы, с помощью таких функций вывода, как TextOut и ExtTextOut. Эти функции автоматически извлекают сведения о символах из символьных шрифтов EUDC или PUA, если eudc включен. Дополнительные сведения см. в разделе Символы области User_Defined и частного использования.
При написании символов EUDCs или PUA работа функции вывода текста зависит от выбранного шрифта. Если выбранный шрифт является интегрированным символьным шрифтом EUDC или PUA, функция получает сведения о символах из этого шрифта. Если выбранный шрифт является двухбайтовой кодировкой TrueType (DBCS), с которым связан отдельный шрифт EUDC, функция получает сведения из указанного шрифта EUDC. Аналогичным образом, если выбранный шрифт является шрифтом TrueType в Юникоде , с которым связан отдельный шрифт символов PUA, функция извлекает сведения из шрифта символов PUA. Если выбранный шрифт не имеет связанного символьного шрифта EUDC или PUA, функция получает сведения из системного шрифта EUDC по умолчанию. Если символ отсутствует в системном шрифте EUDC по умолчанию или отсутствует системный шрифт EUDC по умолчанию, функция записывает символ по умолчанию, определенный выбранным шрифтом.
Приложения могут сопоставлять euDCs с Юникодом и из нее с помощью функций MultiByteToWideChar и WideCharToMultiByte . Функция MultiByteToWideChar сопоставляет большинство euDC с символами в pua в Юникоде. Однако для поддержки определенных национальных или региональных стандартов некоторые euDCs можно сопоставить с кодовыми точками Юникода, не относящихся к PUA. Функция WideCharToMultiByte сопоставляет символ в PUA со своим аналогом EUDC, если такое сопоставление существует и если кодовая точка не имеет допустимого сопоставления, отличного от PUA в Юникоде. Не все кодные страницы имеют диапазон EUDC. Кодовая страница, указанная в вызове WideCharToMultiByte , должна содержать диапазон кода EUDC для сопоставления с диапазоном EUDC. Если кодовая страница не содержит диапазон кода EUDC, функция извлекает символ по умолчанию для всех символов в puA в Юникоде.
MultiByteToWideChar и WideCharToMultiByte не гарантируют сопоставление кругового пути. Иными словами, можно начать с определенной многобайтовой строки, содержащей EUDC, сопоставить строку с Юникодом с помощью MultiByteToWideChar и сопоставить ее с исходной dbCS с WideCharToMultiByte, и в конечном итоге получить результат, который не идентичен исходной строке. Приложения, использующие сопоставление EUDC с Юникодом, должны гарантировать, что все необходимые символы могут выполнять круговую передачу между соответствующей областью EUDC кодовой страницы и puA в Юникоде.
Приложения не должны пытаться сопоставить EUDC с одной кодовой страницы с другой. Если приложение начинается с EUDC из одной кодовой страницы, сопоставляет его с Юникодом с MultiByteToWideChar и сопоставляется с другим DBCS с WideCharToMultiByte, нет никаких гарантий относительно результатов. Исходный символ может быть сопоставлен с другим EUDC на кодовой странице назначения или как неопределенный символ. Аналогичным образом сопоставление строки Юникода с кодовой страницей с диапазоном EUDC может иметь непредвиденные результаты. Если строка Юникода содержит кодовую точку PUA, возможно, кодовая точка будет сопоставлена с eudc, который не представляет один и тот же символ.
Приложения могут сравнивать строки DBCS, содержащие euDCs, с помощью версии ANSI функции CompareString . Функция эффективно сопоставляет символы с Юникодом перед сравнением значений символов. Приложения могут создавать ключ сортировки для строки, используя версию ANSI функции LCMapString и значение LCMAP_SORTKEY. Эта функция фактически сопоставляет символы с Юникодом. Все символы в puA сортируются после всех остальных символов Юникода. В пределах области символы сортируются в числовом порядке. Если приложение пытается получить сведения CTYPE для EUDC с помощью функции GetStringTypeA , функция получает значение NULL для каждого символа.
Связанные темы