Why are unicode characters not rendering correctly
Background:
- I have some unicode characters in my prompt (git status markers essentially)
- I'm running urxvt under xfce on arch linux.
-
I'm using DejaVu Sans Mono for Powerline font, specified via .Xresources line:
URxvt*font: xft:DejaVu Sans Mono for Powerline:pixelsize=14
When I start urxvt the unicode characters do not render correctly.
For example
● renders as â
However, if I then start a new urxvt
from inside the first terminal everything renders correctly.
There doesn't appear to be any difference in the environment between the two terminals.
What could be the difference between the first invocation and the nested invocation? I suspect the font is not correct in the 'outer' instance, but I'm unsure how to check the font of a running X window
UPDATE: It seems that the locale is not correctly set up in the app launcher for xfce4, but presumably the shell inside the first terminal inits it's own locale, meaning that both shells have the same locale.
adding
export LANG=en_GB.UTF-8
to .xinitrc before xfce4 is started seems to fix it. I suspect this isn't the correct way, but it works well enough for me.
screenshot demonstrates the problem:
Note: I moved this question from serverfault.com - i hope this site is more appropriate
I am not entirely certain what the cause of the problem is, but the steps below might help:
-
Confirm that the locale is set up properly
$ 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
-
Enable the desired locales in /etc/locale.gen and run
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
-
Make sure that the desired font can be loaded
$ xset +fp /usr/share/fonts/cyrillic $ fc-cache $ fc-list # to check
- Apply the settings from .Xdefaults (or similar) before starting the "first terminal"
xrdb ~/.Xdefaults