在 Java 中,我正在生成一个包含字母 A
和 B
的字符串,并带有 COMBINING OVERLINE中间有U+0305字符。
@Test
public void test() {
System.out.println("A\u0305B");
}
我在 IDEA 中得到了这个:
但是如果我复制到这里,就会变成A̅B
。
这个来自 Chrome 控制台:
我对combining character感到困惑的组合顺序。哪一个是正确的?
我在写 this在 Kotlin 中编译成 JavaScript 以在浏览器中运行。在IDEA中调试是正确的,但是浏览器显示不同的答案。
最佳答案
如果要相信维基百科并避免跳入密集的 Unicode Consortium 权威 PDF 丛林,与此相关的文本是“In Unicode, diacritics are always added after the main character (in contrast to some older combining character sets such as ANSEL), so it is possible to add several diacritics to the same character, although as of 2010, few applications support correct rendering of such combinations.”(也许我应该在那个时候编辑页面以添加“需要引用” ,不过)。
无论如何,在我系统的 GTK+、SDL 和两个浏览器中,上划线都绘制在前导字符上。我的 Qt 应用程序不支持此字符,但它的所有同级变音符 - 包括“\u0304”和“\u0306”,都绘制在前面的字符上。与上划线不同的是,它们用于拉丁语的“真实世界”文本中,随着变音变位,它们将以荒谬的错误方式呈现。
从这些观点来看,我认为很明显,呈现以下字母标志的子系统存在错误。此外,正如我们从评论中看到的那样,问题可能出在使用的字体上——有缺陷的字体比有缺陷的 IDE 好。
关于javascript - 为什么 Unicode 组合字符顺序在 IDEA 和 Chrome 之间不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621353/