Je sais que de la non-standard %uxxxx régime, mais qui ne semble pas être un choix judicieux puisque le système a été rejetée par le W3C.
Quelques exemples intéressants:
Le caractère du coeur. Si je tape cette adresse dans mon navigateur:
http://www.google.com/search?q=♥
Puis copier et coller, je vois cette URL
http://www.google.com/search?q=%E2%99%A5
qui rend semblent comme Firefox ou Safari) est en train de faire cela.
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
ce qui est logique, sauf pour les choses qui ne peuvent pas être encodé en Latin-1, comme le triple caractère de point.
…
Si je tape l'URL
http://www.google.com/search?q=…
dans mon navigateur, puis copier et coller, j'obtiens
http://www.google.com/search?q=%E2%80%A6
de retour. Ce qui semble être le résultat des
urllib.quote_plus(x.encode("utf-8"))
qui est logique, puisque ... ne peut pas être codé avec le Latin-1.
Mais alors il n'est pas clair pour moi comment le navigateur sait si à décoder avec l'encodage UTF-8 ou en Latin-1.
Depuis ce qui semble être ambiguë:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
fonctionne, donc je ne sais pas comment le navigateur détermine si le décoder avec l'encodage UTF-8 ou en Latin-1.
Quelle est la bonne chose à faire avec les caractères spéciaux j'ai besoin de traiter?