Conosco lo schema% uxxxx non standard ma non mi sembra una scelta saggia poiché lo schema è stato rifiutato dal W3C.
Alcuni esempi interessanti:
Il carattere del cuore. Se lo digito nel mio browser:
http://www.google.com/search?q=♥
Quindi copialo e incollalo, vedo questo URL
http://www.google.com/search?q=%E2%99%A5
il che fa sembrare che Firefox (o Safari) lo stia facendo.
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
il che ha senso, tranne per le cose che non possono essere codificate in Latin-1, come il carattere triplo punto.
…
Se digito l'URL
http://www.google.com/search?q=…
nel mio browser quindi copia e incolla, ottengo
http://www.google.com/search?q=%E2%80%A6
indietro. Che sembra essere il risultato del fare
urllib.quote_plus(x.encode("utf-8"))
il che ha senso poiché ... non può essere codificato con Latin-1.
Ma poi non mi è chiaro come il browser sappia se decodificare con UTF-8 o Latin-1.
Poiché questo sembra essere ambiguo:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
funziona, quindi non so come il browser capisca se decodificarlo con UTF-8 o Latin-1.
Qual è la cosa giusta da fare con i caratteri speciali di cui ho bisogno?