Magazine Internet

Conversions : ISO-8859-1/Windows-1252 et UTF-8

Publié le 21 avril 2008 par Olivier Duval

Imaginons que nous ayons une page encodée en ISO-8859-1 (ou Windows-1252), soit le code page 28591. Si, si, cela peut arriver d'avoir un existant qui balade encore des pages avec cet encodage obsolète, parfois, le choix est limité de tout passer en UTF-8 (code page 65001, la norme actuelle pour l'encodage), car il faut bien souvent le faire en une seule passe, et ce n'est pas toujours simple lorsqu'il existe beaucoup de pages.

Donc, nous avons une page en ISO, dans celle-ci, nous souhaitons consommer un flux (Atom) : celui-ci est encodé en UTF-8 (ce qui est bien...sauf dans notre cas). Certains caractères n'apparaitront pas bien à l'affichage (apparaitront des ? à la place des “ ou —)

page ISO-8859-1

dans une page ISO

config ISO ko

au lieu d'obtenir cette page bien formée :

flux UTF

pour corriger cela, il faudra les convertir en ISO (car page en ISO...)

Une table de correspondance de 27 caractères qui posent souci (prendre le code Hexa pour l'ISO/Win-1252, et le code xml pour l'UTF ) sur ce site

Pour chaque caractère, on va remplacer le code UTF-8 par celui en ISO/Win-1252, un replace suffit , on pourra avoir une méthode utilitaire de ce type, le faire pour les 27 caractères (autrement dit, pas comme dans l'exemple ;-)) :

  1. public static String UTFtoWin1252(String laChaine)
  2. {
  3. string mystr = laChaine;
  4.  
  5. mystr = mystr.Replace((char)0x2022,(char)0x95); // •
  6. mystr = mystr.Replace((char)0x20AC,(char)0x80); // €
  7. mystr = mystr.Replace((char)0x0153,(char)0x9C); // oe
  8. mystr = mystr.Replace((char)0x2026,(char)0x85); // …
  9. mystr = mystr.Replace((char)0x2013,(char)0x96); // –
  10. mystr = mystr.Replace((char)0x201C, (char)0x93); // “
  11. mystr = mystr.Replace((char)0x201D, (char)0x94); // ”
  12. mystr = mystr.Replace((char)0x2014, (char)0x97); // —
  13.  
  14. return mystr;
  15. }

On substitue grâce à la fonction chaque caractère reçu en UTF par son équivalent ISO, on a bien le résultat escompté :

config ISO ok

Bien entendu, ce n'est valable que dans une page ISO, si celle-ci passe en UTF, les caractères n'auront plus de sens - d'où la difficulté de passer tout ou partie d'un existant en UTF où il y a des hacks de ce type : le faire en une seule fois, et repasser sur toutes les pages, bon courage

Un site où vous pourrez retrouver tous les codes d'un caractère en le recherchant.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Olivier Duval 4 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte