【问题标题】:Unicode Blocks: get alphabet of every language [Java]Unicode 块:获取每种语言的字母表 [Java]
【发布时间】:2012-08-21 06:34:39
【问题描述】:

我现在已经搜索了很多,希望有人可以帮助我。我想获取 Java 中每种语言的 Unicode 块。到目前为止我发现的是:

  • Character.UnicodeBlock.ARABIC; Character.UnicodeBlock.Cyrillic;
  • Character.UnicodeBlock.LATIN_1_SUPPLEMENT; ....

但这还不够。我也想知道,德语、法语、俄语字母表中的哪些字母。我只能知道它们对应于拉丁文或西里尔文,而不是特定于语言的字母,如 this。

【问题讨论】:

  • 我认为这是不可能的——语言的字符集没有那么明确。例如,“ç”是“façade”中使用的英文合法字符。 CJK 字符块(中文、日文和韩文)也很好地混合在一起,因为有很多重叠。
  • 好吧,“ç”在英语中可能是一个合法字符,但我认为您在童年时并没有了解到英语字母表中有多个 A-Z 字符,或者?
  • 字母仍然只是 A-Z,但有时 c 可能有尾音 (ç),e 可能有重音 (é) 等。如果你想进入更古老的英语,那么你也得到奇怪形式的字母,如“ſ”(long s)。德语、法语和英语都使用相同的拉丁字母:A-Z。你想怎么分区? (顺便说一句,德语字母 ß 实际上就是我刚才提到的“长 s”,后跟一个普通的 s:ſs => ß)
  • 我不想说这些字符 (ç)(é) 不应该用英文显示。就像这些语言规则一样,您有一个规则,但每个规则也有例外。现在它与英文字母表相同,在LocaleData 中,您有标准和辅助 UnicodeSet,这正是我们正在谈论的内容。
  • 是的,你是对的。这些只是奇怪的边缘情况,基本上不会出现,实际上可以在没有重音的情况下编写它们。很高兴我错了,您能够找到合适的答案!

标签: java unicode alphabet


【解决方案1】:

查看 ICU 课程LocaleData。它允许通过语言环境访问 CLDR 元素,例如 exemplarCharacters。

请注意,exemplarCharacters 的定义相当模糊(语言中使用的字符的概念本身也是模糊的),因此它的值没有在坚实的基础上定义,并且在那里做出的许多选择都相当模糊可以说。但总体而言,那里的数据可能仍然是我们拥有的最佳基础。

还要注意,Unicode 块在这种情况下是相当粗略的单位。例如,Latin 1 Supplement 块包含许多语言中使用的字符,但没有一种语言使用其中的所有字母。

【讨论】:

  • 如果有人像我一样缺少 com.ibm.icu 包,请在此处下载:link 只需将其导入您的构建路径即可
【解决方案2】:

我也想知道,德语、法语、俄语字母表中的哪些字母。

我认为 Unicode 不支持这一点。例如,Unicode 中没有说明在哪种西欧语言中使用了哪些基于拉丁语的字符。

事实上,我有一种感觉,甚至无法确定地做出那个决定。例如,我记得读过一本 19 世纪的英国经典著作,其中作者/出版商将“角色”一词拼写为“角色”。当语言借用其他语言时,这种情况经常发生。

【讨论】:

  • Unicode 标准对不同语言中字符的使用做了很多说明,尽管它甚至没有尝试系统地描述这些事情。 有尝试系统描述,尤其是在 CLDR 活动中。确实这个问题很模糊,但在实践中它仍然很重要,因此人们试图找到“足够好”的分类。
【解决方案3】:
猜你喜欢
  • 2015-08-12
  • 1970-01-01
  • 2020-05-01
  • 2020-07-25
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
相关资源
最近更新 更多