为什么 unicode 字符无法正确呈现

为什么 unicode 字符无法正确呈现

背景:

  • 我的提示中有一些 Unicode 字符(本质上是 git 状态标记)
  • 我在 arch linux 上的 xfce 下运行 urxvt。
  • 我正在使用 DejaVu Sans Mono 作为 Powerline 字体,通过 .Xresources 行指定:

    URxvt*font: xft:DejaVu Sans Mono for Powerline:pixelsize=14

当我启动 urxvt 时,unicode 字符无法正确呈现。

例如

● 呈现为â

urxvt但是,如果我从第一个终端内部启动一个新终端,则一切都能正确呈现。

两个航站楼的环境看上去并没有什么区别。

第一次调用和嵌套调用之间有什么区别?我怀疑“外部”实例中的字体不正确,但我不确定如何检查正在运行的 X 窗口的字体

更新:似乎 xfce4 的应用程序启动器中的语言环境设置不正确,但大概第一个终端内的 shell 初始化了它自己的语言环境,这意味着两个 shell 具有相同的语言环境。

添加

export LANG=en_GB.UTF-8

在 xfce4 启动之前添加到 .xinitrc 似乎可以解决这个问题。我怀疑这不是正确的方式,但对我来说效果已经足够好了。

屏幕截图演示了该问题:

在此处输入图片描述

注意:我将这个问题从 serverfault.com 移出 - 我希望这个网站更合适

答案1

我不完全确定问题的原因是什么,但以下步骤可能会有所帮助:

  1. 确认语言环境设置正确

    $ 区域设置
    LANG=en_US.UTF-8
    LC_CTYPE="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_PAPER="en_US.UTF-8"
    LC_NAME="en_US.UTF-8"
    LC_ADDRESS="en_US.UTF-8"
    LC_TELEPHONE="en_US.UTF-8"
    LC_MEASUREMENT="en_US.UTF-8"
    LC_IDENTIFICATION="en_US.UTF-8"
    LC_ALL=en_US.UTF-8
    
  2. 在 /etc/locale.gen 中启用所需的语言环境并运行locale-gen

    $ cat /etc/locale.gen |grep UTF
    英文版.UTF-8 UTF-8
    nb_NO.UTF-8 UTF-8
    ru_RU.UTF-8 UTF-8
    
  3. 确保可以加载所需字体

    $ xset +fp /usr/share/fonts/cyrillic
    $ fc-缓存
    $ fc-list # 检查

  4. 在启动“第一个终端”之前,应用 .Xdefaults (或类似)中的设置
    xrdb ~/.Xdefaults

答案2

对我来说,这是 urxvt 中 powerline 字形的问题。刚刚发现设置语言环境可以localectl set-locale LANG=en_AU.UTF-8解决这个问题,至少对于 terminess powerline 字体来说是这样(没有尝试过其他字体)

urxvt 电力线符号

它不起作用en_US.UTF-8,我很确定,因为我可以重现它......现在这很奇怪......但它现在可以工作了。

来源

相关内容