Encodages de caractères pris en charge par plus, cat et moins

18

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

Texte ISO-8859, avec terminateurs de ligne CRLF

Ce fichier contient le texte français avec des accents. Ma coque est capable d'afficher l'accent et emacsen mode console est capable d'afficher correctement ces accents.

Mon problème est que more, catet les lessoutils n'affichent pas correctement ce fichier. Je suppose que cela signifie que ces outils ne prennent pas en charge cet ensemble de codage de caractères. Est-ce vrai? Quels sont les encodages de caractères pris en charge par ces outils?

Manuel Selva
la source

Réponses:

17

Votre shell peut afficher des accents, etc. car il utilise probablement UTF-8. Étant donné que le fichier en question est un encodage différent, less moreet catessayez de le lire en UTF et échouez. Vous pouvez vérifier votre encodage actuel avec

echo $LANG

Vous avez deux choix, vous pouvez soit changer votre encodage par défaut, soit changer le fichier en UTF-8. Pour changer votre encodage, 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-terminalou similaire, vous devrez peut-être activer l'encodage, par exemple pour terminatorun clic droit et:

entrez la description de l'image ici

Pour gnome-terminal:

entrez la description de l'image ici

Votre autre (meilleure) option consiste à modifier l'encodage 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!
terdon
la source
4

Les encodages de caractères ISO-8858 sont un peu dépassés pour les systèmes Linux. Tout votre système Linux utilise probablement UTF-8 tout le long. Y compris votre émulateur de terminal et votre shell.

Pourtant. cat, grepet lessn'effectuez aucune transformation d'encodage, ils traiteront votre fichier ISO-8859 / latin1 comme UTF-8, ce qui ne fonctionnera pas.

Si emacs est capable de les afficher, c'est qu'il essaie de détecter automatiquement l'encodage utilisé et semble réussir. Dites à emacs d'enregistrer le fichier au format UTF-8 et vous pourrez utiliser cat/ grep/ quoi que ce soit dessus.

Si vous connaissez l'encodage exact des caractères (ISO-8859 en est une collection, vous devez connaître l'exact: ISO-8859-1 ou ISO-8859-15 ou pire), vous pouvez également convertir vos fichiers à partir de la ligne de commande :

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

Cat, More and Less font simplement leur travail d'affichage du fichier. La traduction entre les encodages n'est pas dans leur description de travail. L'encodage des sauts de ligne n'est pas un problème car CRLF est affiché comme la ligne normale se terminant par LF, mais votre terminal attend probablement du texte encodé en UTF-8, qui est la norme de facto de nos jours.

Luit traduit entre les encodages pris en charge et UTF-8. Vous indiquez à Luit quel encodage traduire en définissant la LC_CTYPEvariable d'environnement ou avec l' -encodingoption. Par exemple, pour afficher un fichier latin-1 (alias ISO 8859-1):

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

Si le fichier est dans un codage exotique que Luit ne prend pas en charge, vous pouvez le diriger via un programme de traduction. Iconv prend en charge de nombreux encodages.

iconv -f latin1 somefile
iconv -f latin1 somefile | less
Gilles 'SO- arrête d'être méchant'
la source