Я использую st, простой терминал или suckless-терминал, который является терминалом с поддержкой Unicode.

У меня есть две машины, обе работают под управлением Arch Linux с в основном одинаковыми настройками системы, но я получаю поддержку Unicode только на старой машине!

После некоторого расследования я думаю, что это как-то связано с моими местами, но я не совсем уверен.

locale дает:

[tim@x1carbon: ~]$ locale
LANG=en_DE.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

Насколько я понимаю, это означает, что все, что написано в "..." , задано неявно, поэтому единственными явно заданными локалями будут LANG и LC_ALL .

Я установил LANG=de_DE.UTF-8 в /etc/locale.conf .

[tim@x1carbon: ~]$ cat /etc/locale.conf
LANG=de_DE.UTF-8
LC_COLLATE=C
LANGUAGE=en_US.UTF-8

но я не помню, чтобы вообще был установлен LC_ALL (на моей старой машине эта переменная просто пуста, когда я запускаю locale)!

Я запустил sudo grep -rnw '/usr/' -e 'LC_.*=C' (шаблон поиска, который просматривает каждый файл в /usr/ -directory), который выводит много скриптов и файлов, содержащих LC_ALL=C , но в большинстве случаев я предполагаю, что существующие программы просто читали мой набор LC_ALL -variable и добавление соответствующих переменных в их сценарии.

Я не могу найти, где я на самом деле установил эту переменную, и я могу ошибаться со своим пониманием, что это является причиной ложного рендеринга, но все же: установка LC_ALL в ложный языковой стандарт может вызвать много других проблем, я думаю.

Кроме того, localectl status выдает:

[tim@x1carbon: ~]$ localectl status
   System Locale: LANG=de_DE.UTF-8
                  LANGUAGE=en_US.UTF-8
                  LC_COLLATE=C
       VC Keymap: de-latin1
      X11 Layout: n/a

... который такой же выходной, как на рабочей машине.

Я передал вывод команды grep в файл журнала, и я могу загрузить этот файл куда-нибудь, но я не знаю, как это сделать правильно, поскольку у меня пока не было причин делать это.

2 ответа2

0

Поэтому после открытия темы в Archlinux-Forum кто-то указал, что я могу установить LC_ALL=C где-нибудь в файле в моем Home-Directory. После запуска grep -rnw '/home/' -e 'LC_.*=C' Я обнаружил, что в моем .bashrc была строка, говорящая

export LC_ALL=C

который я удалил. После перезагрузки запуск locale дал мне en_DE.UTF-8 для большинства моих локалей, что еще более запутанно. Но после того, как я посмотрел в своих региональных настройках (используя KDE в качестве рабочего стола), я обнаружил, что мои настройки "Формат" были установлены на en_DE. Удалил, что тоже, перезагрузил, теперь все работает как положено.

0

"Может ли это быть проблемой?" - Да.

Большинство приложений используют кодировку из LC_ALL , LC_CTYPE или LANG , первая из которых непуста в этом списке. Разрешенное значение также отображается в locale charmap . Насколько я понимаю, у вас есть LC_CTYPE=C , не уверен насчет вашего LC_ALL . Они должны содержать язык UTF-8, а не C.

«Как получается, локали в моей старой системе установлены» - вопрос должен быть: почему они не установлены в вашей новой системе? К сожалению, я не могу ответить на это, но они должны быть установлены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .