写入,映射和排序字符

【勇芳软件工作室】汉化HomePreviousNext

应用程序通过使用TextOutExtTextOut等输出功能,将终端用户定义的字符写入屏幕或打印机,与编写其他字符相同。如果启用了EUDC,这些功能会自动从EUDC字体中检索字符信息。当写入最终用户定义的字符时,文本输出功能的动作取决于当前选择的字体。如果所选字体是集成的EUDC字体,则该函数将从该字体中检索字符信息。如果所选字体是具有相关字体意识的EUDC字体的DBCS TrueType字体,则该函数将从指定的字体感知字体中检索信息。如果所选字体没有关联的字体意识字体,该函数将从系统默认的EUDC字体中检索信息。如果字符不在系统默认的EUDC字体中,或者没有系统默认的EUDC字体,则该函数将写入所选字体定义的默认字符。

应用程序可以使用MultiByteToWideCharWideCharToMultiByte函数将最终用户定义的字符与Unicode进行映射。MultiByteToWideChar功能将最终用户定义的字符映射到Unicode专用区域中的字符位置。如果存在这样的映射,则WideCharToMultiByte函数将私有用途区域中的字符映射到其多字节字符对应。此函数中指定的代码页必须包含要发生的映射的EUDC代码范围。如果没有,则该函数返回Unicode专用区域中任何字符的默认字符。

MultiByteToWideCharWideCharToMultiByte保留从代码页到Unicode的最终用户定义字符的“往返”映射,并返回到原始代码页。但这些功能并不一定保留与其他代码页的映射。例如,如果代码页932中的一个字符被映射到Unicode,然后从Unicode映射到具有EUDC范围的另一个代码页,则原始字符很可能被映射到目标中不同的最终用户定义的字符代码页。类似地,将Unicode字符串映射到具有EUDC范围的代码页可能会有非预期的结果。如果Unicode字符串包含专用代码点,该代码点可能被映射到最终用户定义的字符,无论代码点是否实际表示此类字符。

应用程序可以使用CompareStringA函数来比较包含最终用户定义字符的字符串。该函数在比较字符值之前将字符映射到Unicode最终用户区域。应用程序可以使用LCMapStringA函数和LCMAP_SORTKEY值为字符串创建排序键。此函数首先将字符映射到Unicode。私有使用区域中的所有字符都将排列在所有其他Unicode字符之后。在区域内,字符按数字顺序排列。如果应用程序尝试使用GetStringTypeA函数检索最终用户定义字符的CTYPE ifnormation,则该函数为每个字符返回NULL。