Znam niestandardowy schemat% uxxxx, ale nie wydaje się to mądrym wyborem, ponieważ schemat został odrzucony przez W3C.
Kilka interesujących przykładów:
Charakter serca. Jeśli wpiszę to w przeglądarce:
http://www.google.com/search?q=♥
Następnie skopiuj i wklej, widzę ten adres URL
http://www.google.com/search?q=%E2%99%A5
co sprawia, że wygląda na to, że Firefox (lub Safari) to robi.
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
co ma sens, z wyjątkiem rzeczy, których nie można zakodować w Latin-1, takich jak znak potrójnej kropki.
…
Jeśli wpiszę adres URL
http://www.google.com/search?q=…
do mojej przeglądarki, a następnie kopiuj i wklej, otrzymuję
http://www.google.com/search?q=%E2%80%A6
plecy. Co wydaje się być wynikiem działania
urllib.quote_plus(x.encode("utf-8"))
co ma sens, ponieważ… nie można go zakodować za pomocą Latin-1.
Ale wtedy nie jest dla mnie jasne, skąd przeglądarka wie, czy dekodować za pomocą UTF-8, czy Latin-1.
Ponieważ wydaje się to niejednoznaczne:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
działa, więc nie wiem, w jaki sposób przeglądarka ustala, czy dekodować to za pomocą UTF-8 czy Latin-1.
Co należy zrobić z postaciami specjalnymi, z którymi mam do czynienia?