如何获取某个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上面有点