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

sw1*_*1nn 20 unicode urxvt

背景:

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

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

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

例如

? 呈现为 â

但是,如果我然后urxvt从第一个终端内部开始一个新的,一切都会正确呈现。

两个终端之间的环境似乎没有任何差异。

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

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

添加

export LANG=en_GB.UTF-8
Run Code Online (Sandbox Code Playgroud)

在 xfce4 启动之前到 .xinitrc 似乎修复了它。我怀疑这不是正确的方法,但它对我来说效果很好。

屏幕截图演示了问题:

在此处输入图片说明

注意:我从 serverfault.com 移动了这个问题 - 我希望这个站点更合适

Яро*_*лин 12

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

  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
    en_US.UTF-8 UTF-8
    nb_NO.UTF-8 UTF-8
    ru_RU.UTF-8 UTF-8
    
  3. 确保可以加载所需的字体

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

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