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


18

背景:

  • 我的提示符中有一些unicode字符(基本上是git status标记)
  • 我在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的应用程序启动器中正确设置语言环境,但可能是第一个终端内的shell进入它自己的语言环境,这意味着两个shell都具有相同的语言环境。

加入

export LANG=en_GB.UTF-8

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

截图演示了问题:

在此输入图像描述

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


你是如何开始X的?你如何开始“第一个”终端?这两者的环境似乎不同。
ЯрославРахматуллин11年

尝试LC_ALL=ru_RU.utf8 urxvt从当前的X会话运行。如果俄语(和其他Unicode)字符变得正确,则以防万一您的环境在C语言环境下运行。因此,请检查区域设置xfce。例如,如果您在启动它时.xinitrc尝试在运行之前设置语言环境LANG=ru_RU.utf8 exec startxfce4
Alexander I.Grafov

Answers:


12

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

  1. 确认已正确设置区域设置

    $ locale
    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


这肯定与语言环境有关(请参阅我对问题的更新),所以接受这个答案,因为它指出了我正确的方向。Thnks。
sw1nn于

将语言环境设置放在〜/ .bash_profile(〜/ .zprofile)中通常不是一个糟糕的主意,但是〜/ .xinitrc也可以。
ЯрославРахматуллин11年

如果我登录虚拟终端(即没有X),一切正常。shell位工作正常,它特定于X
sw1nn

可能是因为X(或startxfce)是从不从配置文件读取LANG&co的非登录shell启动的。对于bash,〜/ .bashrc可用于为非登录shell设置内容。但就像我说的那样,将你的语言环境设置和其他变量留在〜/ .xinitrc中没有任何问题。
ЯрославРахматуллин11年

由于字母间距太近,此问题也会影响所有字符。例如,设置URxvt.letterSpace: -10和所有字符显示为框
DavisDude

0

对我来说,urxvt中的电力线字形有问题。刚刚发现设置区域设置localectl set-locale LANG=en_AU.UTF-8修复了我的问题,至少有terminess powerline字体(没有尝试过其他字体)

urxvt电力线符号

它没有合作en_US.UTF-8,我很确定,因为我可以重现它......现在这很奇怪......但它现在有效。

资源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.