我正在研究Windows API函数IsCharAlphaNumeric,它只需要一个TCHAR参数,显然无法对UTF16内容中的代理对做出任何决策。这是否意味着没有代理对的字母数字字符?
超出BMP范围的字符可以是字母。(Michael Kaplan最近讨论了U+1F48C字符分类的一个bug。) 但是IsCharAlphaNumeric
无法看到BMP之外的字符(如您所述的原因),因此您无法通过这种方式获取它们的分类信息。
如果您有代理对,请使用cchSrc = 2
调用GetStringType
并检查C1_ALPHA
和C1_DIGIT
。
编辑: 这个答案的后半部分是不正确的 GetStringType
不支持代理对。
Character.isLetter('\uD840')
返回 false
,即使在字符串中,如果该特定值后跟任何低代理值,则表示一个字母。