我不知道确切的技术术语,但作为标准的 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 或 Nlcombining-character
-- Mn 或 Mc 类decimal-digit-character
-- 类 Ndconnecting-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/