检查大量数字是否为有效的Unicode字符

时间:2019-11-22 13:29:43

标签: c# unicode char

我正在寻找是否大量数字是有效的Unicode字符。我查看了Char.IsSymbol(char)函数,但是它需要一个char作为输入。我需要的是Char.IsSymbol(int)的等价物。例如:Char.IsSymbol(340813);

1 个答案:

答案 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();之前检查代码点是否有效,以免在字符串包含很多无效字符的情况下发生异常

相关问题