我正在寻找是否大量数字是有效的Unicode字符。我查看了Char.IsSymbol(char)
函数,但是它需要一个char作为输入。我需要的是Char.IsSymbol(int)
的等价物。例如:Char.IsSymbol(340813);
答案 0 :(得分:4)
char
是C#中的16位类型,代表UTF-16代码单元,因此它可以存储的最大值为65535,而Char.IsSymbol(340813)
不起作用。
要检查代码点是否为符号,必须将代码点转换为字符串并调用IsSymbol(String, Int32)
overload。要获取字符串,请使用Char.ConvertFromUtf32(Int32)
,它“将指定的Unicode代码点转换为UTF-16编码的字符串。”
int codepoint = 340813;
string character = Char.ConvertFromUtf32(codepoint);
return IsSymbol(character, 0);
要检查代码点是否有效,甚至更容易,因为Unicode字符的最大值为0x10FFFF。由于这个原因,请阅读Why Unicode is restricted to 0x10FFFF?
这意味着您只需要一个简单的if (codepoint <= 0x10FFFF)
,尽管您可能需要排除替代范围0xD800–0xDFFF,因为它对于单个字符不是有效值。这样会导致
bool isValidUnicodeCharacter = codepoint <= 0x10FFFF &&
(codepoint < 0xD800 || codepoint > 0xDFFF)
您可能要在传递给Char.ConvertFromUtf32();
之前检查代码点是否有效,以免在字符串包含很多无效字符的情况下发生异常