LC_ALL = C установлен, понятия не имею, почему

766
Tim Hilt

Я использую 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передал вывод команды -com в файл журнала, и я могу загрузить этот файл куда-нибудь, но я не знаю, как это сделать правильно, так как у меня пока не было причин делать это.

0

2 ответа на вопрос

0
egmont

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

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

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

Спасибо, это направило меня в правильном направлении, я думаю. См редактировать на оригинальный вопрос Tim Hilt 5 лет назад 0
0
Tim Hilt

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

export LC_ALL=C 

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

Похожие вопросы