7

У меня было ужасное время, когда Zsh хорошо играл с Debian Jessie, и я пришел к выводу, что все мои проблемы связаны с языком моей системы. Бегущий locale , я вижу

LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

однако /etc/default/locale содержит LANG=en_US.UTF-8 как и /etc/environment , а мой файл /etc/locale.gen только en_US.UTF-8 UTF-8 комментариев.

  1. Почему locale сообщает о чем-то (тонко) отличном от любого другого параметра в моей системе, и
  2. Как мне настроить (исправить) вещи, чтобы дать «en_US.UTF-8» для каждой опции LC, когда я запускаю locale?

1 ответ1

9

«Правильное» имя - UTF-8 . Однако Linux glibc будет внутренне нормализовать имя кодировки, преобразовав его в строчные буквы и удалив большинство специальных символов, так что оба варианта будут работать (до тех пор, пока они не попадут в системы BSD).

Большую часть времени суффикс .utf8 в $ LANG происходит из GNOME; афаик, это было исправлено в 3.18.

Но, как уже было сказано выше, и utf8 и UTF-8 будут работать одинаково на Linux-Glibc - проблема возникает из других источников. Так как вы не написали , что проблема есть, вот общий контрольный:

  • locale -a (доступные локали) вообще показывает какой-либо вариант ? Т.е. вы сгенерировали (с помощью locale-gen) локали после редактирования locale.gen?

  • Среда эмулятора терминала имеет те же настройки локали? Используйте cat /proc/$(pidof xterm)/environ | tr \\0 \\n чтобы проверить окружение другого процесса.

    (Часто люди пытаются установить envvars локали из своих ~/.bashrc или подобных файлов, но переменные окружения не распространяются "вверх", поэтому конечный результат.)

  • Что printf '\xe2\x99\xa5' ? Если он показывает одну клетку или знак вопроса, это означает, что шрифт не имеет необходимого символа. Если он показывает три символа мусора, это означает, что ваш терминал не имеет нужного $ LANG (или просто не поддерживает UTF-8).

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