我正在查看IsCharAlphaNumeric Windows API函数。由于它只需要一个TCHAR,因此显然无法对UTF16内容的代理对作出任何决定。这是否意味着没有代理对的字母数字字符?
答案 0 :(得分:5)
BMP以外的字符可以是字母。 (Michael Kaplan最近discussed a bug in the classification of the character U+1F48C。)但IsCharAlphaNumeric
无法看到BMP之外的字符(由于您注意到的原因),因此您无法以这种方式获取分类信息。
如果您有代理对,请使用 GetStringType
致电cchSrc = 2
并检查C1_ALPHA
和C1_DIGIT
。
修改:此答案的后半部分不正确GetStringType
does not support surrogate pairs。
答案 1 :(得分:0)
您可以通过查看Unicode plane assignment无法检查非BMP代码点而遗漏的内容来确定自己。
例如,您将无法将英文版的阿拉姆字符识别为字母数字。羞。
答案 2 :(得分:0)
这是否意味着没有代理对的字母数字字符?
不,字母组中有补充代码点。
Comparing a char to a code-point?
例如,
Character.isLetter('\uD840')
返回false
,即使该字符串中的任何低代理值后面的特定值也代表一个字母。