在 C 语言中为 Win32 使用扩展 ASCII 排序规则表



在现有的应用程序中,API 用于将所有 ASCII 字符转换为大写字节,以便进行排序。 咖啡厅 == 咖啡厅 == 咖啡厅 == 咖啡厅。字符 e、é 和 E 都成为排序名称中的字符 E。因此,表示 é 的字节值的 table[137] 的值为 69("E"(。

我使用较旧的、必需的 Win32 API 执行了一些测试,该 API 转换了整个字符串,但没有将字符 é 转换为字符 É 或预期的字符 E。

如何使用较旧的Windows API完成此操作?

解决了,终于几乎按照 paulsm4 的建议做了。

输入代码页是已知的,或者应该是已知的:850。858 也可能受支持,但假设 850。我已经必须将一些已知字符转换为 HTML,因此我知道输入文本中出现了哪些字符。

我为(14(异常(和a-z(使用函数代替表格:

case 'ë':
case 'é':
return 'E';
case 'ï':
return 'I';

原始的动态API(不同的操作系统(或toupper((可能确实是最好的,尽管有人可能会争辩说é应该变成E或É。

对于有限且已知数量的异常,使用静态值的函数也是一种选择。

最后,可以使用另一个原始操作系统为最多包含 256 个元素的静态全表生成代码。因此,您不必手动正确地键入 512 数字。

另一个罕见的旧操作系统有一个 API,它使用当前代码页返回 <= 256 个值:

if (name[i]<=length_table)
sortname[i]=table[i];
else
sortname[i]=name[i];

新代码:

sortname[i]=table(i);

速度不是问题,但新功能首先会处理更常见的字符。它是定制的,所以我不会在这里大便。理论上,如果字符在那里是 <= 127,则可以使用 toupper((。

最新更新