奇怪的 unicode 行为

奇怪的 unicode 行为

我正在使用 Arch Linux,但我似乎无法解决的一件事是 Unicode 字体。

我会给你一个例子来说明哪里出了问题。这是 gucharmap 的屏幕截图: 古恰尔马普

左上角选定的字形按其应有的方式呈现,但随后要复制的文本呈现为完全不同的图标,可能与另一种字体不同。

这是 urxvt 的屏幕截图,显示了相同的图标:

乌尔克斯VT

正如你所看到的,它只是渲染了一些盒子。这是我的大多数应用程序中最常见的行为。

这里fc-list是(它在粘贴箱中,因为太长)的输出,也许它有用,我不知道。

所以我认为正在发生的事情是我安装了另一种字体,其 Unicode 区域与 Material 图标中的字体重叠。那么我的问题是,我该如何解决这个问题?这就是问题所在吗?

更新

将我的字体配置更改为:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
<alias>
    <family>serif</family>
    <prefer><family>Noto Sans</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
<alias>
    <family>sans-serif</family>
    <prefer><family>Noto Sans</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
<alias>
    <family>sans</family>
    <prefer><family>Linux Libertine</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
<alias>
    <family>monospace</family>
    <prefer><family>Hack</family></prefer>
    <default><family>Material Icons</family></default>
</alias>
</fontconfig

修复了 gucharmap 字形与要复制的文本 然而,应用程序不渲染字形的问题仍然存在。

这让我认为问题在于应用程序没有使用正确的字体来渲染字形。我假设设置默认别名的标签会做到这一点,因此如果首选字体不包含 unicode 字符,它们将用作后备。虽然我觉得这是错误的,但文档不太清楚。

更新

有人询问 的输出locale,所以这里是:

LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=

答案1

我想帮助您了解事情是如何运作的,以便您可以自己解决此类问题。你所发生的事情是一种非常正常的行为。

然而,应用程序不渲染字形的问题仍然存在

您没有提到哪个应用程序失败。您需要转到每个应用程序并设置包含字形的字体。例如 LibreOffice,您可以转到Tools -> Options -> LibreOffice Writer -> Basic Fonts (Western)、 或Basic Fonts (CTL)并设置 的字体Default, Heading, List, Caption, Index"。你不应该指望你的配置文件来控制它。

那么你可能会问:

为什么是这样fontconfig?什么是preferdefault、 ... 以及 do 中提到的所有内容man fonts-conf

使用是如果应用程序无法设置其字体并且只能遵循 fontconfig,花药是如果您使用通用姓氏术语配置您的应用程序,例如serif, sans-serif, monospace, ...这里,您的应用程序将咨询fontconfig您的首选字体。

同样,每个应用程序都有其设置字体的方式。对于其中的每一个,您都需要按照其本来的方式进行配置。有您无法强制全球所有应用程序使用您想要的字体

相关内容