【问题标题】:Why is Unicode combining character order different between IDEA and Chrome?为什么IDEA和Chrome之间的Unicode组合字符顺序不同?
【发布时间】:2019-10-30 11:01:48
【问题描述】:

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

@Test
public void test() {
  System.out.println("A\u0305B");
}

我在 IDEA 中得到了这个:

但是如果我复制到这里,它会变成A̅B


这个来自 Chrome 控制台:

我对@9​​87654324@ 的组合顺序感到困惑。哪一个是正确的?

我在 Kotlin 中编写 this 并编译为 JavaScript 以在浏览器中运行。在 IDEA 中调试是正确的,但是浏览器显示的答案不同。

【问题讨论】:

  • 我在 IntelliJ 和 Chrome 中都在 A 上画了横笔画...
  • FWIW,在我的系统上,Idea 的某些字体存在问题,例如当 Menlo 用作控制台字体时,它会将 显示为 A‾ 。这只是一个显示问题,字符串本身是正确的。我想向 JetBrains 报告这一点会有所帮助。
  • 请在youtrack.jetbrains.com/issues/IDEA报告。指定您用于编辑器的操作系统和字体。
  • 我看到 B 上方的线(在 Linux 上使用 Firefox)。
  • @jsbueno 我只是在看我在这个页面上看到的问题,尽管现在我意识到它取决于字体。在这个评论框中,我看到 A̅B 在 A 上方有一条线,但在问题和问题编辑框中,它在 B 上方,但在问题中,如果我删除反引号/等宽,它会移动到 A。我将它复制到 Google 搜索中,它位于 A 上方,包括标题栏和 URL 栏中。所以我想这只是等宽字体有问题。我安装了一堆 Windows Vista 字体;也许这与它有关。

标签: javascript java google-chrome intellij-idea unicode


【解决方案1】:

如果要相信 Wikipedia 并避免跳入密集的 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 和两个浏览器中,Overline 都绘制在前面的字符上。我的 Qt 应用程序不支持这个字符,但它的所有兄弟变音符号 - 包括“\u0304”和“\u0306”,都绘制在前面的字符上。与上划线不同的是,这些用于拉丁语的“现实世界”文本中,随着变音的变化,这些文本会以一种荒谬的错误方式呈现。

从这些观点来看,我认为在下面的字母上呈现标志的子系统很明显是有问题的。此外,正如我们从 cmets 中看到的那样,问题可能仅在于使用的字体 - 有问题的字体比有问题的 IDE 更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多