Кодировка символов, поддерживаемая больше, кошка и меньше

Если Вы не хотите смешать нижний регистр и верхний регистр, установите свою локаль на C, который берет символы в их числовом порядке. _ падения между верхним регистром и нижним регистром.

$ LC_COLLATE=C ls    
BAR  FOO  _score  _under  hello  world
$ LC_COLLATE=en_US ls                    
BAR  FOO  hello  _score  _under  world

Настройки локали LC_MESSAGES (язык сообщений об ошибках), LC_CTYPE (наборы символов) и LC_TIME (формат даты и времени), очень полезны. LC_COLLATE и LC_NUMERIC обычно больше проблемы, чем они стоят, я не рекомендую установить их. Надлежащая лексикографическая сортировка более сложна, чем LC_COLLATE как предполагается, указывает, и это может вызвать все виды странных поведений при использовании диапазонов символов в регулярных выражениях. LC_NUMERIC является главным образом косметическим, кроме тех случаев, когда что-то идет ужасно неправильно, потому что некоторая программа произвела число с десятичным разделителем кроме ..

19
10.06.2013, 10:58
3 ответа

Ваша оболочка может отобразить диакритические знаки и т.д., потому что она, вероятно, использует UTF-8. Так как рассматриваемый файл является другим кодированием, less more и cat попытка состоит в том, чтобы считать его как UTF и сбой. Можно проверить текущее кодирование

echo $LANG

У Вас есть два варианта, можно или изменить кодировку по умолчанию или изменить файл на UTF-8. Для изменения кодирования откройте терминал и тип

export LANG="fr_FR.ISO-8859"

Например:

$ echo $LANG 
en_US.UTF-8
$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ export LANG="fr_FR.ISO-8859"
$ xterm <-- open a new terminal 
$ cat foo.txt 
J'ai mal à la tête, c'est chiant!

Если Вы используете gnome-terminal или подобный, Вы, возможно, должны активировать кодирование, например, для terminator щелкните правой кнопкой и:

enter image description here

Для gnome-terminal :

enter image description here

Ваша другая (лучшая) опция состоит в том, чтобы изменить кодирование файла:

$ cat foo.txt 
J'ai mal � la t�te, c'est chiant!
$ iconv -f ISO-8859-1 -t UTF-8  foo.txt > bar.txt
$ cat bar.txt 
J'ai mal à la tête, c'est chiant!
18
27.01.2020, 19:45

Кодировки символов ISO 8858 немного устарели для систем Linux. Ваша целая система Linux, вероятно, использует UTF-8 полностью. Включая Ваш эмулятор терминала и Вашу оболочку.

Как бы то ни было. cat, grep и less не делайте никакого преобразования кодирования, они будут рассматривать Ваш ISO-8859/latin1 файл как UTF-8, который не будет работать.

Если emacs может отобразить их, это - потому что это пытается автоматически обнаружить используемое кодирование и по-видимому успешно выполниться. Скажите emacs сохранить файл как UTF-8, и Вы сможете использовать cat/grep/ безотносительно на нем.

Если Вы знаете точную кодировку символов (ISO 8859 является набором их, необходимо знать точный: ISO-8859-1 или ISO-8859-15 или хуже), можно также преобразовать файлы из командной строки:

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8
4
27.01.2020, 19:45

CAT, Больше и Меньше просто делает их задание отображения файла. Перевод между кодировкой не находится в их должностной инструкции. Кодирование новых строк не является проблемой, поскольку CRLF отображен точно так же, как нормаль, заканчивающая LF, но Ваш терминал, вероятно, ожидает UTF-8-encoded текст, который является фактическим стандартом в наше время.

Luit переводит между поддерживаемой кодировкой и UTF-8. Вы говорите Luit который, кодируя для перевода путем установки LC_CTYPE переменная среды или с -encoding опция. Например, для отображения латинского 1 (иначе ISO 8859-1) файл:

LC_CTYPE=en_US luit less somefile
luit -encoding ISO8859-1 less somefile

Если файл находится в некотором экзотическом кодировании, которое не поддерживает Luit, можно передать его по каналу через программу переводчика. Iconv поддерживает много кодировок.

iconv -f latin1 somefile
iconv -f latin1 somefile | less
2
27.01.2020, 19:45

Теги

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