为什么IDEA和Chrome之间的Unicode组合字符顺序不同?

wen*_*ner 7 javascript java unicode google-chrome intellij-idea

在Java中,我正在生成一个带字母的字符串,A且字符串之间带有B一个COMBINING OVERLINE U + 0305字符。

@Test
public void test() {
  System.out.println("A\u0305B");
}
Run Code Online (Sandbox Code Playgroud)

我在IDEA中得到这个:

在此处输入图片说明

但是,如果我复制到此处,它将变为A?B


这是来自Chrome控制台的:

在此处输入图片说明

组合字符的组合顺序使我感到困惑。哪一个是正确的?

我写在科特林编译到运行JavaScript在浏览器中。在IDEA中进行调试是正确的,但浏览器显示了不同的答案。

jsb*_*eno 4

如果您相信维基百科并且避免跳入密集的 Unicode 联盟权威 PDF 丛林,则与此相关的文本是“在 Unicode 中,变音符号始终添加在主要字符之后(与一些较旧的组合字符集(例如 ANSEL)相反) ,因此可以向同一个字符添加多个变音符号,尽管截至 2010 年,很少有应用程序支持此类组合的正确呈现。 ”(不过,也许我应该在此时编辑页面以添加“需要引用”)。

无论如何,在我的系统中的 GTK+、SDL 和两个浏览器中,上划线都绘制在前面的字符上。我的 Qt 应用程序不支持此字符,但其所有同级变音符号 - 包括“\u0304”和“\u0306”,都是在前面的字符上绘制的。与上划线不同的是,它们用在拉丁语言的“现实世界”文本中,随着变音符号的变化,这些文本会以一种极其错误的方式呈现。

从这些点来看,我认为很明显,在以下字母上呈现符号的子系统存在错误。此外,正如我们从评论中看到的,问题可能仅仅在于所使用的字体——有缺陷的字体比有缺陷的 IDE 更好。