6

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

  • 拉丁
  • 西里尔
  • 希腊语
  • 希伯来语
  • 阿拉伯
  • 梵文
  • 古吉拉特语
  • 卡纳达语
  • 老挝
  • 平假名
  • 货币符号
  • 箱图

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

4

1 回答 1

6

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

按班级分组

第三列以 2 位短格式指定字符类,长格式在此处指定

  • letter-character-- Lu、Ll、Lt、Lm、Lo 或 Nl 类
  • combining-character-- Mn 或 Mc 类
  • decimal-digit-character-- Nd 级
  • connecting-character-- 个人电脑类
  • 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);
}

按语言分组

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

  • Latin: Latin Capital Letter A
  • Latin Extended A: Latin Small Letter C with acute
  • Latin Extended B: Latin Capital Letter Tone Six
  • Latin Extended Additional: Latin Capital Letter B With Dot Above
于 2013-03-18T08:53:31.293 回答