mardi 23 décembre 2008

UTF-8

Après quelques frayeurs en Python, qui semble-t-il gérait mal les accents, je me suis remis à essayer de comprendre les arcanes des encodages...

Dans mon cas, j'avais écrit cette fonction :
def returnStatut(self):
if self.dfin is not None:
return 'Obsolète'
if self.dvalid is not None:
return 'Validé'
else :
return 'Créé'


En ayant soin de marquer au début du fichier :
# coding: UTF-8


et quand je lançais mon application Django, je ne voyais rien, pas même une erreur.

J'ait tenté la commande :
chaine = unicode('Créé', 'UTF-8')


qui a foiré lamentablement.

chaine = unicode('Créé', 'cp1252')


lui a fonctionné.

En fait, le problème venait de Notepad++, mon éditeur qui par défaut fonctionne en ANSI, qui doit être proche du cp1252 (chère à Eclipse et Windows, vu que je connais ce format pour ça).

Toujours est-il qu'après avoir changé le format de base de Notepad++ en UTF-8, mon problème a disparu. Alleluia!

Comme quoi aussi, il faut bien connaitre les alias entre les différents encodages.
ANSI = cp1252
ISO = latin1 = ISO-8859-1

Vu que chaque outils utilisent son propre vocabulaire, ça devient vite le bordel.

Ce qui m'étonne c'est que je n'ai jamais eu ce type de problème en Java?

Ressources :

Voici pourtant un lien qui explique bien les choses à regarder quand on a pourtant un problème en Unicode et J2EE (ça fait du boulot!)

Une explication simple de l'unicode en Python.

Une très bonne discussion qui s'étonne de la fin de la possibilité de forcer l'encodage pour sys.stdout.

Un article du PyZine sur l'encodage.

Un point sur le site officiel de Python

Un guide sur le minimum à connaitre par tous développeur (selon l'auteur)