我有一个Delphi 7应用程序,我在其中处理 ANSI 字符串,我需要计算它们的字符数(而不是字节数)。我总是知道与字符串关联的字符集(以及代码页)。
因此,知道字符集(代码页)后,我目前正在使用MultiByteToWideChar
它来获取字符数。当字符集是中文、韩文或日文字符集之一时,它很有用,其中大多数字符的长度为 2 个字节,并且简单地使用该Length
函数不会给我想要的东西。
但是,它仍然将复合字符计为两个字符,我需要将它们计为一个。现在,一些复合字符在 Unicode 中具有预先组合的版本,由于MB_PRECOMPOSED
默认使用 ,因此这些字符将被正确计为一个字符。但是许多字符根本不作为预先组合存在,例如希伯来语、阿拉伯语、泰语等中的字符,这些字符被计为两个。
所以问题真的是:如何将复合字符计为单个字符?MultiByteToWideChar
我不介意将 ANSI 字符串转换为宽字符串来计算字符数,反正我已经在这样做了。