Je connais le schéma non standard% uxxxx mais cela ne semble pas être un choix judicieux puisque le schéma a été rejeté par le W3C.
Quelques exemples intéressants:
Le caractère du cœur. Si je tape ceci dans mon navigateur:
http://www.google.com/search?q=♥
Puis copiez et collez-le, je vois cette URL
http://www.google.com/search?q=%E2%99%A5
ce qui donne l'impression que Firefox (ou Safari) le fait.
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
ce qui a du sens, sauf pour les choses qui ne peuvent pas être encodées en Latin-1, comme le caractère triple point.
…
Si je tape l'URL
http://www.google.com/search?q=…
dans mon navigateur puis copiez et collez, j'obtiens
http://www.google.com/search?q=%E2%80%A6
arrière. Ce qui semble être le résultat de
urllib.quote_plus(x.encode("utf-8"))
ce qui a du sens puisque… ne peut pas être encodé avec Latin-1.
Mais alors ce n'est pas clair pour moi comment le navigateur sait s'il doit décoder avec UTF-8 ou Latin-1.
Puisque cela semble 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 s'il faut décoder cela avec UTF-8 ou Latin-1.
Quelle est la bonne chose à faire avec les caractères spéciaux avec lesquels je dois traiter?