背景:
- 我的提示中有一些 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
我不完全确定问题的原因是什么,但以下步骤可能会有所帮助:
确认语言环境设置正确
$ 区域设置 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
在 /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
确保可以加载所需字体
$ xset +fp /usr/share/fonts/cyrillic $ fc-缓存 $ fc-list # 检查
- 在启动“第一个终端”之前,应用 .Xdefaults (或类似)中的设置
xrdb ~/.Xdefaults
答案2
对我来说,这是 urxvt 中 powerline 字形的问题。刚刚发现设置语言环境可以localectl set-locale LANG=en_AU.UTF-8
解决这个问题,至少对于 terminess powerline 字体来说是这样(没有尝试过其他字体)
它不起作用en_US.UTF-8
,我很确定,因为我可以重现它......现在这很奇怪......但它现在可以工作了。