Apportez votre aide…
FAQ sur les encodages de caractères
Vous êtes perdu entre polices, encodages des sigles comme latin, utf8, unicode, iso8859-15, etc. ?
Cette page a pour l'ambition de vous permettre de comprendre pourquoi vous trouvez parfois :
- des fichiers textes, des pages web qui sont ou deviennent illisibles (notamment dès qu'il y a des accents) ;
- des signes comme Ǐ, Ǐ, ÿ, ǚ, ♥ dans vos données ;
- des noms de fichiers apparaissant avec des signes cabalistiques ;
- des affichages de données différents selon les programmes utilisés ;
- etc.
et de vous permettre de vous en sortir.
- ne codez et ne lisez qu'en anglais (comme il n'y a pas d'accents, les mauvais réglages sont souvent invisibles, d'où peut-être la légèreté du traitement du problème pour certains programmeurs utilisant des machines configurées en américain) ;
- n'écrivez et ne lisez que des fichiers sans accents, et sans apostrophes (même remarques, sur une plage de caractères ces encodages sont normalement équivalents).
Résumé,Règles de base
Un texte, suite de caractères, n'a de sens que si l'on connaît son encodage.
- L'encodage par défaut sous Windows (interface graphique) est cp1252.
- L'encodage par défaut d'une console DOS est cp850 pour les systèmes de l'Europe de l'Ouest (Western Europe) ou cp437 pour les États-Unis.
- Aucun éditeur n'est capable — et ne le sera jamais — de déterminer l'encodage d'un fichier texte.
- Les bonnes applications peuvent travailler indifféremment avec différents encodages (généralement, ce sont ASCII, cp1252, ISO-8859-1 et UTF-8, ISO-8859-15 est moins utilisé) pour les utilisateurs de langues latines et anglo-saxonnes.
- Du point 4, il découle que les systèmes d'exploitation sont cohérents, les problèmes qui se posent sont généralement dus à une méconnaissance du fonctionnement des encodages.
- Il est faux de croire qu'il faille changer l'encodage d'un fichier pour passer d'un système à un autre. Si l'échange de fichiers est régulier, il est préférable de régler ses outils de travail (éditeurs, etc.) en conformité avec les-dits fichiers.
- Attention : le web est archi bourré d'informations fausses à ce sujet.
- Attention (2) : Se méfier comme de la peste de l'apparence d'une conversion réussie. Les encodages étant similaires pour de nombreux caractères, de nombreux utilisateurs croient en voyant le texte que la conversion était correcte ou suffisante alors que les choix des options de conversion sont erronés.
- Une bonne introduction / explication (en anglais) sur ce que sont les encodages est ici :
http://www.joelonsoftware.com/articles/Unicode.html
La version en français: https://web.archive.org/web/20181007200358/http://french.joelonsoftware.com/Articles/Unicode.html
Un peu de théorie
Préliminaire
L'encodage dont il est question ici n'a de sens que pour les fichiers texte (ou plus exactement codés en texte et non en binaire). Cela inclut les codes sources, les fichiers log, les noms de fichiers (système de fichiers), etc.
Pour des fichiers binaires, il existe différents types d'encodage, mais qui n'ont rien à voir avec le sujet de cette page.
L'objectif de l'encodage est d'associer un numéro pour chaque caractère d'une langue.
Il est indispensable, pour l'échange d'informations de préciser le codage utilisé.
Ne pas le faire peut rendre un document difficilement lisible (remplacement des lettres accentuées par d'autres suites de caractères, etc.). plus ici
L'ancêtre : l'ASCII
La norme de base est l’ASCII. Cette norme (normalisée par l’ANSI en 1986) n'utilise que 7 bits et permet de coder 128 caractères (26×2 lettres + 10 chiffres + un peu de ponctuation + des caractères non affichables comme les sauts de lignes, mais pas d'accents).
Les ordinateurs modernes représentent chaque caractère avec au moins 8 bits (un octet), les codes 128 à 255 sont disponibles pour étendre l'ASCII (à des caractères accentués notamment). Ces extensions portent le nom de « page de code» (code page en anglais).
Chaque page de code génère de fait un encodage différent mais dont les 128 premiers caractères sont identiques et dont certains des suivants se recoupent parfois.
Pour résumer, l'ASCII est le standard de compatibilité mais ne supporte pas les accents.
Pour des information sur les systèmes de codage plus récents (1991), reportez-vous aux pages Unicode, UTF-8 et UTF-16.
Un peu de méthodologie
Objectif :
- connaître l'encodage du fichier source
- garder la cohérence de l'encodage
Encodages standards
Windows et les applications prévues pour y fonctionner utilisent par défaut le cp1252, une variante de l'ISO 8859-1 (en grande partie similaires).
Sous Ubuntu, l'UTF-8 est l'encodage par défaut de toutes les applications courantes, ou presque.
- Ubuntu: utf8 (depuis Breezy?)
- Windows 98 (FAT32): cp1252
- Windows XP (ntfs): cp1252. ??
- Windows 7 : iso-8859-1
- et pour Windows 10?
Identification
- Dans un fichier HTML correctement rédigé, l'encodage est identifié par le rédacteur dans l'en-tête de la page, il suffit donc de parcourir les premières lignes du code source de celle-ci (Ctrl+U pour y accéder).
- Dans un fichier texte, a priori aucune reconnaissance automatique n'est possible. Néanmoins, il y a quelques possibilités de deviner le contenu lorsque certains caractères sont présents (commande file -i) :
file -i * a.txt: text/x-pascal; charset=us-ascii b.xml: text/xml c.txt: text/plain; charset=utf-8
La commande retourne le type du fichier, par exemple text/xml s'il s'agit d'un fichier XML, puis il indique le type d'encodage à la suite de "charset=" : par exemple, dans le cas de c.txt, l'encodage de caractère détecté est utf-8.
Conversions
Attention : une conversion mal appropriée ou appliquée deux fois successivement risque de corrompre définitivement votre fichier (c'est-à-dire, impossibilité de revenir en arrière par une conversion inversée). Sauvegardez donc vos données et faites des tests avant d'aller trop loin.
Exemple de script permettant la conversion d'un fichier txt de UTF-8 vers ISO 8859-15 :
#!/bin/bash for i in *.txt do iconv -f utf8 -t iso8859-15 "$i" > "$i".new done
Pour s'y retrouver dans les dénominations : une table.
Outils de migration
- encodage des noms de fichiers (pour le système de fichiers) ;
- encodage du contenu des fichiers.
- utf8-migration-tool (Outils de migration UTF-8)
- konq-toutf8 (UTF-8 encoding utility service menu for Konqueror)
- iconv (commande en ligne, dans le package convmv voir https://wiki.ubuntu.com/UTFEightMigrationTool)
- l'utilitaire recode : http://pwet.fr/man/linux/commandes/recode, très puissant.
Réglage des éditeurs de textes
La plupart des éditeurs de textes sont capables de lire ou écrire dans différents encodages. Il faut trouver l'option d'affichage adéquate (usuellement dans Outils → Encodage).
Cas des partitions de disques
Pour une partition, il faut préciser un encodage pour décrire les noms de fichiers (chaque fichier pouvant utiliser des encodages différents).
Sous GNU/Linux, il faut indiquer l'encodage au montage de la partition (voir /etc/fstab).
Liens utiles
Général
- Character_encoding (en)
- Codage_de_caractères (fr)