Friday, June 23, 2006

L'UTF m'a tuer

J'ajoute un feed (atom 1.0) pour suivre les commentaires de ce blog bifide, généré à partir d'un petit CGI en Python, construit en se basant sur une source sûre. J'itère jusqu'à ce que mon système fonctionne et que le feed valide.

Tout va bien tout est en UTF-8. Facile. Je suis trop fort.

Tiens, on me signale que mon flux s'affiche mal avec des problèmes sur les accents. Allons donc ! Ca marche très bien ! D'ailleurs ça valide... pas !

Le titre d'une entrée de blog est obligatoire et le formulaire de saisie n'a pas de champ titre. J'avais choisi de tronquer le commentaire à 20 caractères pour créer le titre... seulement la chaîne fournie par le module CGI est une chaîne de caractères codés sur un octet ! Donc mes caractères accentués tenaient sur deux "caractères" (oui ça commence à ressembler du Raymond Devos) et un caractère malheureux se trouvait à cheval sur la frontière du 20ème octet. Chlac ! Coupé en deux le caractère. Du coup, ça ne veut plus rien dire, ce n'est plus de l'utf-8 et les lecteurs de feed retombent en mode "ascii" (un caractère par octet) montrant deux caractères cabalistiques à la place de mes jolis caractères accentuées...

J'ai alors patiemment protégé toutes mes entrées en les décodant selon utf-8 et toutes mes sorties en les encodant (en utf-8 toujours). Comme ça, entre les deux, je manipule des chaînes de caractères et pas des chaînes d'octets qui se prennent pour des caractères ! Quelle vilaine vieille habitude de confondre octet et caractère...