IMB > cellule > Environnement informatique > FAQ > Astuces

Passage de ISO-8859-1 à UTF-8

 Préambule

La représentation informatique des caractères (lettres, chiffres, symboles) se standardise avec l’apparition du code ASCII vers 1960. Malheureusement, ce standard ne concerne qu’un petit nombres de caractères, suffisant pour l’écriture de textes en anglais ou de programmes. Plusieurs extensions (ISO 646, CP437, ...) sont développées, par exemple pour représenter des caractères accentués. Elles sont hélas incompatibles et rendent problématiques l’échange de textes d’un système à l’autre. Des logiciels comme TeX réglent ce problème en se limitant au standard ASCII et en imposant des constructions génériques mais lourdes (comme \'{e} pour é).

Vers 1992, une nouvelle norme d’encodage, ISO-8859-1 ou ISO Latin1, se généralise pour introduire les caractères accentués utilisés en Europe de l’Ouest (pour ce qui nous concerne), norme qui évolue ensuite vers ISO-8859-15 avec l’apparition du caractère € (Euro). Hélas, des extensions propriétaires du standard apparaissent de nouveau, créant de nouvelles variantes incompatibles CP1552 (Windows) et Mac OS Roman (Mac OS). Indépendamment de ces problèmes récurrents de compatibilité, la limite de ces normes est un encodage régional, différent pour l’Europe de l’Ouest, l’Europe de l’Est, l’Asie, les langues arabes, etc. : il n’est pas possible d’écrire en des langues de région différentes dans un même document.

En 1991, un ensemble universel de caractères est défini : Unicode, regroupant les caractères de toutes les langues officielles de l’ensemble des pays dans le monde ; ainsi que des alphabets disparus comme le cunéiforme ou les hiéroglyphes, voire des alphabets imaginaires comme le Tengwar inventé par Tolkien. Plusieurs encodages pour les caractères d’Unicode sont proposés, parmi lesquels émerge la norme UTF-8. Le choix d’Unicode et d’UTF-8 permet en particulier de mélanger plusieurs langues dans un même document et de régler tous les problèmes de compatibilité entre systèmes ayant fait ce choix d’encodage.

Les systèmes Unix, Windows et Apple utilisent UTF-8 en interne. Vu de l’utilisateur, l’encodage par défaut reste souvent ISO-8859-1 ou une de ses extensions propriétaires, pour des raisons de compatibilité. UTF-8 est en effet compatible avec ASCII, mais pas avec ISO-8859-1 : un texte français encodé en ISO-8859-1 n’est pas de l’UTF-8 valide s’il contient des caractères accentués. S’il est édité par un logiciel qui attend de l’UTF-8, tous les caractères « invalides » (tous les caractères accentués) disparaîtront.

Les systèmes d’exploitation sur le réseau de l’IMB utilisent l’encodage UTF-8. Si vous échangez des documents utilisant d’autre encodage comme ISO-8859-1 vous devez prendre des précautions afin que les fichiers textes contenant des caractères accentués ISO-8859-1 ou UTF-8 soient bien acceptés par vos collègues et pas massacrés lors d’une édition. Les fichiers concernés sont essentiellement les fichiers LaTeX, vos pages HTML, éventuellement quelques fichiers textes bruts (.txt)... s’ils contiennent des lettres accentuées.

Il n’est pas obligatoire de modifier l’encodage de vos fichiers existants : une instruction LaTeX \usepackage[latin1]{inputenc}, ou un tag HTML

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

assurent que ces fichiers continuent d’être correctement traités par les programmes qui doivent les interpréter, respectivement latex et un navigateur Web. Mais il est important d’être conscient de l’encodage utilisé pour vos fichiers et de bien comprendre qu’un problème peut se poser lors de l’édition d’un fichier contenant des caractères accentués, en particulier lors d’échanges avec des collègues. Heureusement, il est facile de changer l’encodage d’un fichier.

 Précautions à prendre avec les fichiers TeX et LaTeX

 Les fichiers LaTeX doivent contenir au moins deux packages pour le traitement des caractères accentués :

  • \usepackage[T1]{fontenc}  % Pour afficher en DVI ou PDF les accents
  • \usepackage[latin1]{inputenc} % Car j’écris selon le jeu de caractères ISO-8859-1
  • \usepackage[utf8]{inputenc} % Car j’écris selon le jeu de caractères UTF-8

Vous devez positionner le package inputenc selon que votre éditeur de texte et votre fichier est dans un encodage latin1 (ISO-8859-1) ou UTF-8. En effet, le problème réside dans le fait que les fichiers édités changent d’ordinateurs ou de personnes. Dans ce cas, ils peuvent passer par des encodages différents. Si un fichier encodé en UTF-8 est enregistré au format ISO (et vice-versa), tous les accents deviennent des caractères illisibles, et la marche arrière est impossible.

 Le plus important est que votre éditeur de texte enregistre le fichier dans le système d’encodage d’origine de votre fichier avant édition

 Emacs, Xemacs et Vi (vim)

Emacs/Xemacs et Vim détectent l’encodage du fichier lors de sa lecture. L’éditeur se met en accord avec l’encodage, afin que, lorsque vous tapez des accents ou lorsque vous enregistrez, l’encodage reste cohérent. Il ne vous reste alors qu’à positionner correctement le package inputenc pour que les accents s’affichent.

Remarque : Emacs affiche dans la barre inférieure le type d’encodage utilisé : si la barre commence avec les caractères -1: le fichier est en ISO-8859-1, si la barre commence avec les caractères -u: le fichier est encodé en UTF-8. Dans Vim, la command :set fileencoding indique l’encodage du fichier.

 Les autres éditeurs de texte

D’autres éditeurs de textes ne détectent pas l’encodage, mais le positionnent dans leurs préférences. Vous devez donc garder à l’esprit de positionner soit ISO-8859-1 soit UTF-8 dans votre logiciel en accord avec la façon dont le fichier est encodé.

 Comment savoir ? ...

... si mon éditeur de texte est en accord avec l’encodage du fichier en cours d’édition ? Tapez quelques caractères accentués (éàçè, etc.) : si ces caractères s’affichent correctement et si les caractères déjà écrits (avant modification) sont aussi bien affichés, c’est bon. Sinon, il y a une inversion entre les préférences de votre éditeur et l’encodage du fichier : n’enregistrez surtout pas votre fichier ! Lisez plutôt les deux points suivants :

 Comment changer la préférence d’encodage...

... de mon éditeur de texte ? Si vous ne trouvez pas cette information dans les préférences du logiciel ni après une rapide recherche internet, écrivez à la cellule informatique

 Comment changer l’encodage de mon fichier ?

Sous Unix/Linux, ainsi que MacOSX, la commande iconv gère cette conversion.

  • De ISO-8859-1 vers UTF-8 : iconv -f latin1 -t utf8 fichier.tex > fichier-utf8.tex
  • De UTF-8 vers ISO-8859-1 : iconv -f utf8 -t latin1 fichier.tex > fichier-iso.tex

De cette façon vous obtenez un nouveau fichier dans l’encodage de votre choix

Il existe sous Linux une commande permettant de modifier l’encodage du fichier sans le renommer (cette comande s’installe aussi sous MacOSX grâce à fink) :

Attention recode modifie votre original. Vérifiez toujours que le résultat est conforme à vos attentes. Sinon, effectuez la transformation inverse (par exemple latin1..utf8 après utf8..latin1) ou reprenez une sauvegarde.

  • Le fichier encodé en ISO-8859-1 devient UTF-8 : recode -d latin1..utf8 fichier.tex
  • Le fichier encodé en UTF-8 devient ISO-8859-1 : recode -d utf8..latin1 fichier.tex

Recode permet aussi de passer tous les accents en mode TeX (c’est à dire \’e pour é) :

  • Le fichier encodé en ISO-8859-1 aura ses accents convertis en TeX : recode -d latin1..tex fichier.tex
  • Le fichier encodé en UTF-8 aura tous les accents convertis en TeX : recode -d utf8..tex fichier.tex
  • Le fichier retrouve ses accents en ISO-8859-1 :
    recode -d tex..latin1
    fichier.tex
  • Le fichier retrouve ses accents en UTF-8 :
    recode -d tex..utf8
    fichier.tex

Remarque : l’option -d de recode préserve la syntaxe TeX, sinon des caractères tels que { serait réécrits en \{

Attention (rappel) l’usage de recode est risqué car vous risquez de perdre l’original

 Malgré un bon encodage, les accents ne s’affichent pas

... dans mon fichier DVI ou PDF, pourquoi ? Afin que LaTeX traite correctement l’encodage, vous devez lui préciser sous quel encodage le fichier est enregistré. Le package inputenc le précise :

  • \usepackage[latin1]{inputenc} % Car j'écris selon le jeu de
    caractères ISO-8859-1
  • \usepackage[utf8]{inputenc} % Car j'écris selon le jeu de
    caractères UTF-8

 Qu’en est-il des fichiers HTML ?

Si des pages web personnelles n’affichent plus correctement les accents, vous rencontrez le même problème. Pour cela, vous pouvez recoder les fichiers de la même façon que dans le paragraphe précédent. Vous pouvez aussi recoder en HTML pur (dans ce cas les accents deviennent moins lisibles : &eacute; au lieu de é) :

  • De ISO-8859-1 vers HTML : recode latin1..h fichier.html
  • De HTML vers ISO-8859-1 : recode h..latin1 fichier.html
  • De UTF-8 vers HTML : recode utf8..h fichier.html
  • De HTML vers UTF-8 : recode h..utf8 fichier.html

 Ce qu’il faut retenir de ce passage

  • Lorsque vous travaillez sur des fichiers personnels : choisissez un type d’encodage et gardez-le. Néanmoins, UTF-8 est la norme et minimisera les problèmes ultérieurs.
  • Lorsque vous travaillez sur des fichiers avec d’autres personnes, entendez-vous avant tout sur le type d’encodage que vous allez utiliser, et que chacun s’y tienne. Ainsi vous éviterez de perdre des heures de travail car le collègue a enregistré dans un autre encodage.
  • Si vous avez perdu un fichier, pensez à la copie de la veille. La cellule Informatique pourra vous guider pour que vous puissiez la récupérer (si c’est possible).
  • Pensez à faire des sauvegardes sur vos ordinateurs personnels !