Почему символы юникода не отображаются правильно

Фон:

  • У меня есть несколько символов Юникода в моем приглашении (по сути, маркеры состояния 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 ответа

Решение

Я не совсем уверен, в чем причина проблемы, но могут помочь следующие шаги:

  1. Убедитесь, что локаль настроена правильно

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

Для меня это была проблема с символами Powerline в urxvt. Только что узнал, что установка локали с localectl set-locale LANG=en_AU.UTF-8 исправляет проблему для меня, по крайней мере, со шрифтом terminess powerline (не пробовал другие шрифты)

Не работал с en_US.UTF-8 Я уверен, потому что я могу воспроизвести это... теперь это странно... но это работает сейчас.

источник

Другие вопросы по тегам