Чому символи unicode відображаються неправильно


19

Фон:

  • У моєму підказці є кілька символів unicode (по суті маркери статусу git)
  • Я запускаю urxvt під xfce на arch linux.
  • Я використовую DejaVu Sans Mono для шрифту Powerline, вказаний через рядок .Xresources:

    URxvt*font: xft:DejaVu Sans Mono for Powerline:pixelsize=14

Коли я запускаю urxvt, символи unicode відображаються неправильно.

Наприклад

● надає як

Однак якщо я тоді запускаю нову urxvtзсередини першого терміналу, все виводиться правильно.

Немає різниці в оточенні між двома терміналами.

Яка може бути різниця між першим викликом і вкладеним викликом? Я підозрюю, що шрифт невірний у зовнішньому екземплярі, але я не знаю, як перевірити шрифт запущеного вікна X

ОНОВЛЕННЯ : Здається, що локаль неправильно налаштований у запуску додатків для xfce4, але, імовірно, оболонка всередині першого терміналу вводить його власний локал, тобто, обидві оболонки мають однаковий локал.

додавання

export LANG=en_GB.UTF-8

до .xinitrc перед запуском xfce4, здається, виправить це. Я підозрюю, що це не правильний шлях, але він працює досить добре для мене.

скріншот демонструє проблему:

введіть тут опис зображення

Примітка. Я перемістив це питання з serverfault.com - сподіваюся, цей сайт є більш підходящим


Як почати X? Як ви запускаєте "перший" термінал? Здається, що середовище для цих двох відрізняється.
Ярослав Рахматуллін

Спробуйте запустити LC_ALL=ru_RU.utf8 urxvtз поточного X сеансу. Якщо російські (та інші символи Unicode) стали правильними, ви знаходитесь у тому випадку, коли ваше середовище працює під мовою C. Тому перевірте параметри локалі для xfce. Наприклад, якщо ви його запустили, .xinitrcспробуйте встановити локаль перед тим, як запустити LANG=ru_RU.utf8 exec startxfce4.
Олександр Іванович Графов

У мене була така ж проблема. Це було викликано тим, як я починав старткс. Замість того, щоб робити "exec startx", я робив "startx" у своєму .zprofile
Самір Садек,

Відповіді:


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 / шрифти / кирилиця
    $ fc-кеш
    $ fc-list # для перевірки

  4. Застосуйте параметри з .Xdefaults (або подібних) перед запуском "першого терміналу"
    xrdb ~ / .Xdefaults


Це, безумовно, стосується локалі (див. Моє оновлення до питання), тому прийнявши цю відповідь, як вона вказала мені в правильному напрямку. Думає.
sw1nn

Зазвичай це не страшна ідея розміщувати параметри локалі у ~ / .bash_profile (~ / .zprofile), але ~ / .xinitrc теж працюватиме.
Ярослав Рахматуллін

якщо я ввійду у віртуальний термінал (тобто без X), це все працює. Біт оболонки працює нормально, характерний для X
sw1nn

Можливо, тому, що X (або startxfce) запускається з оболонки без входу, яка не зчитує LANG & co з профілю. Для bash, ~ / .bashrc можна використовувати для встановлення речей для оболонок без входу. Але, як я вже сказав, немає нічого поганого в тому, щоб залишити свої параметри локалі та інші змінні в ~ / .xinitrc.
Ярослав Рахматуллін

Ця проблема також може торкнутися всіх символів через занадто близький інтервал між літерами. Наприклад, встановити URxvt.letterSpace: -10та всі символи відображати як поля
DavisDude

0

Для мене це була проблема з силовими гліфами в urxvt. Щойно я з'ясував, що встановлення локалі з localectl set-locale LANG=en_AU.UTF-8виправляє проблему для мене, щонайменше, з шрифтом powerline power termity (принаймні, не пробував інших шрифтів)

символи лінії живлення urxvt

Це не працювало en_US.UTF-8, я майже впевнений, тому що можу це відтворити ... зараз це дивно ... але це працює і зараз.

джерело

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.