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) est
standardisée très tôt, avec l’apparition du code ASCII vers 1960.
Malheureusement, ce standard ne concerne qu’un petit nombres de caractères,
juste suffisant pour l’écriture de textes en anglais ou de programmes.
Plusieurs extensions (ISO 646, CP437, Mac OS Roman...) sont développées pour
étendre ce format, 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 volontairement au standard ASCII et en imposant des constructions
sures et 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). Cette norme évolue ensuite vers
ISO-8859-15 avec l’apparition du caractère € (Euro). Hélas, aussi bien
Microsoft qu’Apple développent des extensions propriétaires du standard,
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 donc pas
possible d’écrire en différentes langues 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 d’écrire en 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.

Depuis Windows XP et Mac OS X, les systèmes Windows et Apple utilisent UTF-8
en interne, tous les Unix modernes aussi. 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é. C’est le cas actuellement à l’IMB.
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.

Vu l’évolution des systèmes informatiques et des échanges par Internet, la
norme UTF-8 s’impose à notre usage des systèmes d’informations. La mise à jour
des systèmes sur le réseau de l’IMB nécessite de passer de ISO-8859-1 à
UTF-8. Dans le cadre de cette évolution, vous allez donc devoir 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 seront essentiellement les fichiers
LaTeX, vos pages HTML, éventuellement quelques fichiers textes bruts (.txt)...
s’ils contiennent des lettres accentuées.

Il n’est pas nécessaire 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), malgré le changement d’encodage par défaut au niveau de nos systèmes
d’exploitation.

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 si vous le

transmettez à un collègue. Heureusement, il est facile de changer l’encodage
d’un fichier.

Toute solution « automatique » menée par la cellule informatique, en particulier
toute conversion massive d’encodages de fichiers serait catastrophique. Nous
menons donc une action de sensibilisation et mettons à votre disposition
quelques outils pour vous faciliter cette migration.

 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 de façon fiable l’encodage du fichier lors de sa lecture et se met en accord, 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 : lorsque vous éditez un fichier accentué, Emacs vous 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.

 Les autres éditeurs de texte

En général, les 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 ? Pour cela, tapez simplement quelques caractères accentués (éàçè, etc.) et regardez si ces caractères s’affichent correctement et si les caractères déjà écrits (avant modification) sont aussi bien affichés. Si ce n’est pas le cas, il y a une inversion entre les préférences de votre éditeur et l’encodage du fichier. Dans ce cas, 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 n’arrivez pas à trouver cette information dans les préférences du logiciel, écrivez à la cellule informatique

 Comment changer l’encodage de mon fichier ?

Sous Unix/Linux (les postes de travail courants à l’IMB, ainsi que MacOSX, vous avez la commande iconv qui gère cette conversion très bien.

  • 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 permet de préserver la syntaxe TeX, sinon des caractères tels que { pourraient être réécrit 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é. C’est le package inputenc qui 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 vous avez des pages web personnelles qui ne s’affichent plus correctement (accents mal affichés), c’est que 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. Sachez néanmoins que UTF-8 est l’évolution naturelle.
  • 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 l’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)...
  • Faites des sauvegardes !