时钟分隔符在 GNOME 3.38 下使用 Ubuntu 字体在 Arch Linux 上呈现错误

jun*_*ist 13 linux fonts gnome locale arch-linux

我最近从 Ubuntu 切换到 Arch Linux,为了简化切换,我安装了 Ubuntu 使用的 GTK 主题,并在整个系统中切换到 Ubuntu 字体系列。但是,GNOME 界面中的时钟存在一个小缺陷,所有冒号:都被替换为三分号?,这让我很烦恼。

屏幕顶部的时钟

锁屏时钟

时钟应用

这可能是由不正确设置的区域设置引起的,或者这可能是我需要在 GNOME 上提交的错误?

编辑 1:我从ttf-ubuntu-font-familyArch 存储库中安装了 Ubuntu 字体系列。

con*_*tti 16

嗯,这个问题对我来说很有趣,所以我做了一些挖掘......

是 gnome-clocks 源代码。来自world-item.vala

public string time_label {
    owned get {
        return Utils.WallClock.get_default ().format_time (date_time);
    }
}
Run Code Online (Sandbox Code Playgroud)

好的。从Utils.vala

public string format_time (GLib.DateTime date_time) {
    string time = date_time.format (format == Format.TWELVE ? "%I:%M %p" : "%H:%M");

    // Replace ":" with ratio, space with thin-space, and prepend LTR marker
    // to force direction. Replacement is done afterward because date_time.format
    // may fail with utf8 chars in some locales
    time = time.replace (":", "\xE2\x80\x8E\xE2\x88\xB6");

    if (format == Format.TWELVE) {
        time = time.replace (" ", "\xE2\x80\x89");
    }

    return time;
}
Run Code Online (Sandbox Code Playgroud)

对我个人来说似乎很奇怪,但好吧,:"\xE2\x80\x8E\xE2\x88\xB6".

我在我的系统上运行了这个:$ echo -e "\xE2\x80\x8E\xE2\x88\xB6"并得到:?

在你的身上运行它,看看你得到了什么。

根据网站,上述序列也转换为:. 但什么是:?从网站上复制它并粘贴到这里。结果:

U+200E : LEFT-TO-RIGHT MARK [LRM]
U+2236 : RATIO
Run Code Online (Sandbox Code Playgroud)

现在由您来确定您的字体是否打印RATIO为三分号,或者您的语言环境是否混乱并且 UTF-8 处理不正确。我现在不在 GNOME 上,但我认为您可以进入U+2236全局 GNOME 搜索来查找并复制它。如果它导致三分号,那么我建议更改您的字体并重试,如果它导致冒号,那么它肯定是您的字体,如果不是很可能是您的语言环境/UTF-8 设置。

编辑:在任何文本框中(例如搜索超级用户)按CTRL+ SHIFT+ u,然后输入2236并按enter。如果它是三分号,我会责怪你的字体。

Edit2:我在网上找到了一个 ubuntu 字体测试器,并在上面做了上面提到的组合键。它对:我来说是一个正常的冒号。我反复检查,这RATIO字符...

你能帮我一个忙并运行以下命令:fc-match "?"- 确保复制它,因为冒号(三分号?)是RATIO字符。如果它输出正确的(ubuntu)字体,那么要么是那个 ubuntu 字体测试网站是错误的,要么是醉了我的想法......

Edit3:另一种检查它是否是字体的简单方法:如果上述echo命令的结果为您提供三分号,请尝试更改终端字体并查看它是否变成冒号。如果您在第一次尝试时确实得到了冒号,请将终端的字体更改为与系统字体相同,看看它是否变成了三分号...

Edit4:在此处使用 u+2236 字符尝试 Ubuntu 字体表明,Ubuntu 字体确实甚至不包含比率符号,因此无论您的系统退回到哪种字体都会导致此问题。

  • 如果是 UTF-8 问题,您将不会得到 _any_ 单个 Unicode 字符——很可能您会看到六个垃圾字符,每个字节一个。是字体问题。 (4认同)
  • 如果有人想启发我,我无法理解为什么 GNOME 会从`:` 到`RATIO` 进行这种奇怪的改变...... (3认同)
  • 我很好奇改变的动机。它似乎在此提交中被引入,但遗憾的是没有解释:https://gitlab.gnome.org/GNOME/gnome-clocks/-/commit/d72e612ef6bf75a3e3cc286a731ef1f9abb34830 虽然在搜索中我发现了这个关于相同行为的 UX 问题在 Windows 中:https://ux.stackexchange.com/questions/122248/should-u2236-ratio-be-used-as-a-time-separator-instead-of-u003a-colon 也许它是用相同的(老实说,听起来有点可疑)印刷动机,就像在 Windows 中一样? (3认同)
  • 此外,`fc-match` 不接受字符。它采用字体模式,并认为您指定了`"∶"` _作为字体名称。_由于您没有名为“∶”的字体,它会为您提供它配置的任何无衬线字体. 你可能需要类似`FC_DEBUG=4 pango-view -q --text="∶" |& awk -F\" '/family: /{m=$2} END{print m}'` 来确定什么正在使用字体。 (2认同)