如何获取某个UTF-8语言组中的所有字符?

我不知道确切的技术术语,但UTF-8作为标准包括来自某些语言分组的字符,可以在Windows 字符映射中使用类似Arial Unicode MS的字体观察。

  • 拉丁
  • 西里尔
  • 希腊语
  • 希伯来语
  • 阿拉伯
  • 天城文
  • Gujrati
  • 卡纳达语
  • 老挝
  • 平假名
  • 货币符号
  • 盒子图纸

如何获取每组下的字符列表? 这可能是一个API,或者只是网上某处的普通列表/ DB。 我找到了列出所有内容的wiki文章 ,但没有列出可迭代的forms。 有任何想法吗?

您可以在已发布的UnicodeData.txt上访问整个unicode字符列表,这是一个CSV格式的文件,列出了包含组信息的每个字符。

按class级分组

第三列指定字符类,以2位数字forms表示此处指定的longforms 。

  • letter-character – 类Lu,Ll,Lt,Lm,Lo或Nl
  • combining-character – 类Mn或Mc
  • decimal-digit-character – 类Nd
  • connecting-character – 类PC
  • formatting-character – 类Cf

它甚至可以使用C#LINQ迭代某个组的字符:

 var charInfo = Enumerable.Range(0, 0x110000) .Where(x => x < 0x00d800 || x > 0x00dfff) .Select(char.ConvertFromUtf32) .GroupBy(s => char.GetUnicodeCategory(s, 0)) .ToDictionary(g => g.Key); foreach (var ch in charInfo[UnicodeCategory.LowercaseLetter]) { Console.Write(ch); } 

按语言分组

但是,未明确提及语言分组,因此您必须解析名称的第一个单词以按语言对每个char进行分组。 这是最可靠的方法,因为每个拉丁语unicode字符都以前缀“Latin”开头。 示例如下:

  • 拉丁文: Latin Capital Letter A.
  • 拉丁语扩展A: 拉丁语小写字母C与急性
  • Latin Extended B: Latin Capital Letter Tone Six
  • 拉丁语扩展附加: 拉丁大写字母B上面有点