Почему символы юникода не отображаются правильно
Фон:
- У меня есть несколько символов Юникода в моем приглашении (по сути, маркеры состояния git)
- Я запускаю urxvt под Xfce на Arch Linux.
Я использую шрифт DejaVu Sans Mono для Powerline, указанный в строке.Xresources:
URxvt*font: xft:DejaVu Sans Mono for Powerline:pixelsize=14
Когда я запускаю urxvt, символы юникода не отображаются правильно.
Например
● отображается как â
Однако, если я тогда начну новый urxvt
изнутри первого терминала все отображается правильно.
Там, кажется, нет никакой разницы в окружающей среде между двумя терминалами.
В чем может быть разница между первым вызовом и вложенным вызовом? Я подозреваю, что шрифт неправильный в "внешнем" экземпляре, но я не уверен, как проверить шрифт запущенного окна X
ОБНОВЛЕНИЕ: Кажется, что языковой стандарт неправильно настроен в панели запуска приложения для xfce4, но, вероятно, оболочка внутри первого терминала вводит свою собственную локаль, то есть обе оболочки имеют одинаковую локаль.
добавление
export LANG=en_GB.UTF-8
в.xinitrc до запуска xfce4, кажется, это исправить. Я подозреваю, что это не правильный путь, но он работает достаточно хорошо для меня.
скриншот демонстрирует проблему:
Примечание: я перенес этот вопрос с serverfault.com - надеюсь, этот сайт более уместен
2 ответа
Я не совсем уверен, в чем причина проблемы, но могут помочь следующие шаги:
Убедитесь, что локаль настроена правильно
$ locale ЛАНГ =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 en_US.UTF-8 UTF-8 nb_NO.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8
Убедитесь, что нужный шрифт может быть загружен
$ xset +fp /usr/share/fonts/cyrillic $ fc-cache $ fc-list # для проверки
- Примените настройки из.Xdefaults (или аналогичные) перед запуском "первого терминала"
xrdb ~ /.Xdefaults
Для меня это была проблема с символами Powerline в urxvt. Только что узнал, что установка локали с localectl set-locale LANG=en_AU.UTF-8
исправляет проблему для меня, по крайней мере, со шрифтом terminess powerline (не пробовал другие шрифты)
Не работал с en_US.UTF-8
Я уверен, потому что я могу воспроизвести это... теперь это странно... но это работает сейчас.