我想检查一个大数字是否是有效的 Unicode 字符。我查看了该Char.IsSymbol(char)函数,但它需要一个字符作为输入。我需要的是相当于Char.IsSymbol(int). 例如:Char.IsSymbol(340813);
char是C#中的16位类型,表示UTF-16编码单元,因此它可以存储的最大值是65535,Char.IsSymbol(340813)不起作用。
要检查代码点是否是符号,您必须将代码点转换为字符串并调用IsSymbol(String, Int32)重载。要得到列使用Char.ConvertFromUtf32(Int32)其“指定的Unicode代码点成UTF-16编码转换为字符串。”
int codepoint = 340813;
string character = Char.ConvertFromUtf32(codepoint);
return IsSymbol(character, 0);
Run Code Online (Sandbox Code Playgroud)
要检查代码点是否有效甚至更容易,因为 Unicode 字符的最大值是 0x10FFFF。原因阅读为什么 Unicode 被限制为 0x10FFFF?
这意味着您只需要一个简单的,if (codepoint <= 0x10FFFF)尽管您可能需要排除代理范围 0xD800–0xDFFF,因为它不是单个字符的有效值。所以结果是
bool isValidUnicodeCharacter = codepoint <= 0x10FFFF &&
(codepoint < 0xD800 || codepoint > 0xDFFF)
Run Code Online (Sandbox Code Playgroud)
Char.ConvertFromUtf32();如果您的字符串包含大量无效字符,您可能需要在传递之前检查代码点是否有效以避免异常