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

Rob*_*cks 5 .net c# fonts character utf-8

我不知道确切的技术术语,但是作为标准,UTF-8包含来自某些语言组的字符,可以在Windows 字符图中使用Arial Unicode MS这样的字体进行观察。

  • 拉丁
  • 西里尔
  • 希腊语
  • 希伯来语
  • 阿拉伯
  • 德夫纳加里
  • 古吉拉提
  • 卡纳达语
  • 老挝
  • 平假名
  • 货币符号
  • 箱型图

如何获得每个集合下的字符列表?这可能是一个API,也可能只是网络上某个地方的普通列表/数据库。我找到了列出所有内容的Wiki文章,但没有以可迭代的形式列出。有任何想法吗?

Rob*_*cks 6

您可以在已发布的UnicodeData.txt(这是一个CSV格式的文件,列出每个带有组信息的字符)中访问Unicode字符的整个列表。

按班级分组

第三列以2位数字的缩写形式指定字符类,此处以long数字形式指定

  • 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);
}
Run Code Online (Sandbox Code Playgroud)

按语言分组

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

  • 拉丁语:拉丁大写字母A
  • 拉丁扩展A:带有小写字母的拉丁小写字母C
  • 拉丁文扩展B:拉丁文大写字母音调六
  • 拉丁文扩展附加:拉丁文大写字母B,上面带有点