Кодування символів підтримується більше, кішка та менше


18

У мене текстовий файл закодований таким чином file:

Текст ISO-8859 з терміналами CRLF

Цей файл містить текст французької мови з наголосами. Моя оболонка здатна відображати акценти, а emacsв консольному режимі здатна правильно відображати ці акценти.

Моя проблема полягає в тому , що more, catі lessінструменти не відображати цей файл правильно. Я думаю, що це означає, що ці інструменти не підтримують цей набір кодування символів. Це правда? Які кодування символів підтримуються цими інструментами?

Відповіді:


17

Ваша оболонка може відображати наголоси тощо, тому що, ймовірно, використовується 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клацання правою кнопкою миші та:

введіть тут опис зображення

Для gnome-terminal:

введіть тут опис зображення

Ваш інший (кращий) варіант - змінити кодування файлу:

$ 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!

4

Кодування символів 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

2

Кіт, все більше і менше роблять свою роботу, показуючи файл. Переклад між кодуваннями не є в їх описі. Кодування нових рядків не є проблемою, оскільки CRLF відображається так само, як і звичайний рядок, що закінчується LF, але ваш термінал, ймовірно, очікує текст, кодований UTF-8, що є фактично стандартним на сьогодні.

Luit перекладається між підтримуваними кодуваннями та UTF-8. Ви кажете Luit, яке кодування перекласти, встановивши LC_CTYPEзмінну середовища або за допомогою -encodingпараметра. Наприклад, для відображення файлу latin-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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.