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?
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:
Pour gnome-terminal
:
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!
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
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