Unicode 字母数字字符范围

3
我正在研究Windows API函数IsCharAlphaNumeric,它只需要一个TCHAR参数,显然无法对UTF16内容中的代理对做出任何决策。这是否意味着没有代理对的字母数字字符?
3个回答

5

超出BMP范围的字符可以是字母。(Michael Kaplan最近讨论了U+1F48C字符分类的一个bug。) 但是IsCharAlphaNumeric无法看到BMP之外的字符(如您所述的原因),因此您无法通过这种方式获取它们的分类信息。

如果您有代理对,请使用cchSrc = 2调用GetStringType并检查C1_ALPHAC1_DIGIT

编辑: 这个答案的后半部分是不正确的 GetStringType不支持代理对


0

通过查看Unicode平面分配,您可以自行确定由于无法检查非BMP代码点而缺少的内容。

例如,您将无法将帝国亚拉姆字符识别为字母数字字符。可惜。


0
这是否意味着没有代理对的字母数字字符?
不,有一些补充码点在字母组中。 比较char和code-point? 例如,Character.isLetter('\uD840') 返回 false,即使在字符串中,如果该特定值后跟任何低代理值,则表示一个字母。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接