Tag: utf-8

Page Web : enlever les caractères indésirables (les puces) de Word

Posted by – April 30, 2008

Lors de saisies de formulaires, il arrive assez fréquemment que l’utilisateur copie / colle à partir de Word son texte. Malheureusement, ce dernier est souvent formaté, notamment avec des puces dessinés.

Ces puces ne seront pas lisibles par le navigateur, malgré l’UTF-8 de la page Web. Aussi, autant que faire se peut, il faut les retirer pour l’affichage sinon on encourt le risque d’avoir ce type de caracères sous FF ou IE ou Safari (disponible en version 3.11, apparemment plus stable sous Windows) :

puces Word FF

puces Word IE

Alors comment faire ?

Grâce à ce site qui nous permettra de rechercher le code UTF du ou des caractères indésirables, par exemple les puces de l’exemple, on recherchera (copier/coller directement du symbole affiché) le symbole qui donnera le code F0E0 :

Une fonction utilitaire avec une regexp suffira pour remplacer les puces par le caractère -, avec un fichier Resource.resx qui contiendra tous les codes UTF des puces à substituer. Pour dire au Replace d’interpréter un code UTF, il faudra préfixer le code par \\u, pour F0E0, cela donnera

  1. Regex.Replace("\\uF0E0","-");

La méthode utilitaire :

  1. public static String CleanWord(String chaine)
  2. {
  3. string mystr = chaine;
  4.  
  5. string[] paras = Resource.RegexSubstituteUTF8.Split(';');
  6. mystr = Regex.Replace(mystr, paras[0], paras[1]); // puce Word , ...
  7.  
  8. return mystr;
  9. }

avec comme Resource.resx :

Resource.resx

on aura alors le résultat escompté

Puces

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

Posted by – April 21, 2008

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 existe un contrôle (au sens UserControl d’ASP.NET) qui permet de consommer un flux (Atom) et de l’afficher : ce flux 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 :-)

Conclusion : il est préférable que toute la chaîne soit en UTF : le contenu des fichiers, l’encodage renvoyé par le serveur Web, les données enregistrées dans la base de données, sinon, gare aux astuces de programmation.

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