Как en_US локаль, как предполагается, работает с печатаемыми символами

У меня есть две системы надежного человека человечности. Один недавно установленный и один немного более старый.

В этих системах я испытываю некоторые затруднения из-за en_US локаль, это ведет себя по-другому, наиболее легко замеченное с этой командой:

printf '\xe5\xe4\xf6' | LANG=en_US LC_ALL=en_US hexdump -vC

На более старом я получаю ожидаемый вывод:

00000000  e5 e4 f6                                          |åäö|
00000003

но на недавно установленном я получаю точки вместо åäö:

00000000  e5 e4 f6                                          |...|
00000003

Я также проверил систему CentOS 6, и там я также получаю вывод, который я ожидаю (первый). Но, если я работаю locale-gen --purge в более старой системе это изменяет на более новое (неправильный IMO) вывод.

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

localedef - список имеет идентичный вывод:

en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US
en_US.iso88591
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
es_US
es_US.iso88591
es_US.utf8
1
задан 2 October 2014 в 17:19

2 ответа

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

Нажимают Alt+F2 и работают env LANG=en_US gnome-terminal. Тогда в окне терминала:

$ printf '\xe5\xe4\xf6\n'
åäö
$

Это указало бы, что нет никакой проблемы с локалью, по крайней мере, но она включает ISO-8859-1, кодирующий как ожидалось.

Редактирование:

Печать с помощью hexdump хорошо работает также:

$ printf '\xe5\xe4\xf6' | hexdump -vC
00000000  e5 e4 f6                                          |åäö|
00000003
$
2
ответ дан 10 November 2019 в 19:22

Мне удалось вернуть его к работе. Во-первых, удалите все локали (я на самом деле использую изображение докера так, чтобы часть только запускалась новый), тогда

echo "en_US ISO-8859-1" >> /var/lib/locales/supported.d/local
dpkg-reconfigure locales

Это генерирует рабочие файлы локали. После этого я могу добавить UTF-8 один, не повреждая его.

echo "en_US UTF-8" >> /var/lib/locales/supported.d/local
dpkg-reconfigure locales

Теперь я предполагаю, что должен понять, как сделать отчет об ошибках...

1
ответ дан 10 November 2019 в 19:22

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

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