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

标签 c# .net utf-8 fonts character

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

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

如何获取每个集合下的字符列表?这可能是一个 API 或只是网络上某处的普通列表/数据库。我找到了 wiki article列出所有内容,但不是以可迭代的形式。有什么想法吗?

最佳答案

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

按类别分组

第三列指定字符类,采用 2 位缩写形式,longforms specified here .

  • letter-character -- 类 Lu、Ll、Lt、Lm、Lo 或 Nl
  • combining-character -- Mn 或 Mc 类
  • decimal-digit-character -- 类 Nd
  • connecting-character -- 类 Pc
  • 格式化字符 -- 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" 开头。示例如下:

  • 拉丁文:拉丁文大写字母 A
  • 拉丁文扩展 A:带尖音符的拉丁文小写字母 C
  • 拉丁语扩展 B:拉丁语大写字母第六声
  • 拉丁文扩展附加:上面带点的拉丁文大写字母 B

关于c# - 如何获取某个UTF-8语言组内的所有字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15472692/

相关文章:

c# - 如何使用 .NET 更改本地安全策略

c# - 不要在选择某些项目时关闭 ContextMenuStrip

java - HTML 标题的 Unicode 问题,问号? 65533;

c# - 在 LINQ 语句中添加条件

c# - 带有正则表达式的 JToken.SelectToken 用于查找与模式匹配的值?

c# - Linq To Nhibernate 中的子查询问题

c# - 为什么包含命名参数会导致 "type arguments for method cannot be inferred from usage"错误?

.net - 在 _layouts 下从 ASP.NET 运行 STSADM

php - 在 PHP 中检测文件编码

java - 如何将 utf-8 字符串附加到属性文件