Zeichenkodierungen werden von more, cat und less unterstützt

18

Ich habe eine Textdatei, die folgendermaßen codiert ist file:

ISO-8859-Text mit CRLF-Zeilenabschluss

Diese Datei enthält den französischen Text mit Akzenten. Meine Shell kann Akzente anzeigen und emacsim Konsolenmodus können diese Akzente korrekt angezeigt werden .

Mein Problem ist , dass more, catund lessTools Sie diese Datei nicht korrekt angezeigt werden . Ich vermute, dass dies bedeutet, dass diese Tools diesen Zeichensatz nicht unterstützen. Ist das wahr? Welche Zeichenkodierungen werden von diesen Tools unterstützt?

Manuel Selva
quelle

Antworten:

17

Ihre Shell kann Akzente usw. anzeigen, da sie wahrscheinlich UTF-8 verwendet. Da die fragliche Datei eine andere Codierung hat less moreund catversucht, sie als UTF zu lesen und fehlzuschlagen. Sie können Ihre aktuelle Kodierung mit überprüfen

echo $LANG

Sie haben zwei Möglichkeiten: Sie können entweder Ihre Standardkodierung ändern oder die Datei in UTF-8 ändern. Öffnen Sie zum Ändern der Codierung ein Terminal und geben Sie Folgendes ein

export LANG="fr_FR.ISO-8859"

Beispielsweise:

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

Wenn Sie gnome-terminaloder ähnliches verwenden, müssen Sie möglicherweise die Codierung aktivieren, z. B. für terminatorRechtsklick und:

Bildbeschreibung hier eingeben

Für gnome-terminal:

Bildbeschreibung hier eingeben

Ihre andere (bessere) Option besteht darin, die Kodierung der Datei zu ändern:

$ 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!
terdon
quelle
4

ISO-8858-Zeichencodierungen sind für Linux-Systeme etwas veraltet. Ihr gesamtes Linux-System verwendet wahrscheinlich UTF-8. Einschließlich Ihres Terminalemulators und Ihrer Shell.

Jedoch. cat, grepUnd lesskeine Codierung Transformation tun, werden sie Ihre ISO-8859 / latin1 - Datei als UTF-8, welche nicht Arbeit behandeln.

Wenn emacs sie anzeigen kann, liegt das daran, dass es versucht, die verwendete Codierung automatisch zu erkennen, und anscheinend erfolgreich ist. Sagen Sie Emacs die Datei als UTF-8 zu speichern und Sie werden in der Lage zu verwenden cat/ grep/ was auch immer auf sie.

Wenn Sie die genaue Zeichenkodierung kennen (ISO-8859 ist eine Sammlung davon, Sie müssen die genaue kennen: ISO-8859-1 oder ISO-8859-15 oder schlechter), können Sie Ihre Dateien auch über die Befehlszeile konvertieren :

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8
BatchyX
quelle
2

Cat, More and Less erledigen nur ihre Aufgabe, die Datei anzuzeigen. Das Übersetzen zwischen Codierungen ist nicht in der Jobbeschreibung enthalten. Das Kodieren von Zeilenumbrüchen ist kein Problem, da CRLF genau wie das normale Zeilenende-LF angezeigt wird, Ihr Terminal jedoch wahrscheinlich UTF-8-kodierten Text erwartet, was heutzutage der De-facto-Standard ist.

Luit übersetzt zwischen unterstützten Codierungen und UTF-8. Sie teilen Luit mit, welche Codierung zu übersetzen ist, indem Sie die LC_CTYPEUmgebungsvariable oder die -encodingOption festlegen. So zeigen Sie beispielsweise eine Latin-1-Datei (auch bekannt als ISO 8859-1) an:

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

Wenn die Datei in einer exotischen Codierung vorliegt, die Luit nicht unterstützt, können Sie sie über ein Übersetzerprogramm weiterleiten. Iconv unterstützt viele Kodierungen.

iconv -f latin1 somefile
iconv -f latin1 somefile | less
Gilles 'SO - hör auf böse zu sein'
quelle