web-dev-qa-db-fra.com

Encodages de caractères supportés par plus, chat et moins

J'ai un fichier texte codé comme suit selon file:

Texte ISO-8859, avec Terminateurs de ligne CRLF

Ce fichier contient le texte de French avec les accents. Ma coquille est capable d'afficher l'accent et emacs en mode console est capable d'afficher correctement ces accents.

Mon problème est que more, cat et less outils n'affichent pas correctement ce fichier. Je suppose que cela signifie que ces outils ne prennent pas en charge ce jeu de codage de caractères. Est-ce vrai? Quels sont les codages de caractères pris en charge par ces outils?

19
Manuel Selva

Votre shell peut afficher des accents, etc., car il utilise probablement UTF-8. Étant donné que le fichier en question est un codage différent, less _ _ _ more et cat _ tentent de le lire comme UTF et échouer. Vous pouvez vérifier votre codage actuel avec

echo $LANG

Vous avez deux choix, vous pouvez modifier votre codage par défaut ou modifier le fichier en UTF-8. Pour changer votre codage, ouvrez un terminal et tapez

export LANG="fr_FR.ISO-8859"

Par exemple:

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

Si vous utilisez gnome-terminal ou similaire, vous devrez peut-être activer le codage, par exemple pour terminator clic droit et:

enter image description here

Pour gnome-terminal:

enter image description here

Votre autre option (meilleure) est de modifier le codage du fichier:

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

Les codages de caractères ISO-8858 sont un peu obsolètes pour les systèmes Linux. Votre système Linux entier utilise probablement UTF-8 tout le chemin. Y compris votre émulateur de terminal et votre coquille.

Toutefois. cat, grep et less Ne faites pas de transformation de codage, ils traiteront votre fichier ISO-8859/Latin1 comme UTF-8, qui ne fonctionnera pas.

Si EMACS est capable de les afficher, c'est parce qu'il essaie d'autodétecter le codage utilisé et apparemment réussir. Dites à EMACS pour enregistrer le fichier comme UTF-8 et vous pourrez utiliser cat/grep/autre sur celui-ci.

Si vous connaissez le codage exact du personnage (ISO-8859 est une collection d'entre eux, vous devez connaître l'exact one: ISO-8859-1 ou ISO-8859-15 ou pire), vous pouvez également convertir vos fichiers de la ligne de commande. :

iconv --from-code ISO-8859-15 your_file -o your_file_as_utf8
5
BatchyX

Le chat, de plus en moins, fait son travail d'affichage du fichier. La traduction entre les codages n'est pas dans leur description de travail. Le codage des nouvelles lignes n'est pas un problème car le CRLF est affiché, tout comme la ligne normale terminée LF, mais votre terminal attend probablement du texte codé UTF-8, qui est la norme de facto de nos jours.

Luit Traduit entre les codages pris en charge et UTF-8. Vous dites à la allure qui codant pour traduire en définissant le LC_CTYPE variable d'environnement ou avec le -encoding option. Par exemple, pour afficher un fichier Latin-1 (A.K.A. ISO 8859-1):

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

Si le fichier est dans certains codages exotiques que LUIT ne prend pas en charge, vous pouvez le piler via un programme de traduction. iconv prend en charge de nombreux codages.

iconv -f latin1 somefile
iconv -f latin1 somefile | less