Ich kenne das nicht standardmäßige% uxxxx-Schema, aber das scheint keine kluge Wahl zu sein, da das Schema vom W3C abgelehnt wurde.
Einige interessante Beispiele:
Der Herzcharakter. Wenn ich dies in meinen Browser eingebe:
http://www.google.com/search?q=♥
Dann kopiere und füge es ein, ich sehe diese URL
http://www.google.com/search?q=%E2%99%A5
Das lässt es so aussehen, als ob Firefox (oder Safari) dies tut.
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
Das macht Sinn, außer für Dinge, die nicht in Latin-1 codiert werden können, wie das Dreifachpunktzeichen.
…
Wenn ich die URL eingebe
http://www.google.com/search?q=…
in meinen Browser dann kopieren und einfügen, bekomme ich
http://www.google.com/search?q=%E2%80%A6
zurück. Welches scheint das Ergebnis des Tuns zu sein
urllib.quote_plus(x.encode("utf-8"))
Das macht Sinn, da… nicht mit Latin-1 codiert werden kann.
Aber dann ist mir nicht klar, woher der Browser weiß, ob er mit UTF-8 oder Latin-1 dekodieren soll.
Da dies nicht eindeutig zu sein scheint:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
funktioniert, daher weiß ich nicht, wie der Browser herausfindet, ob er das mit UTF-8 oder Latin-1 dekodieren soll.
Was ist das Richtige, um mit den Sonderzeichen umzugehen, mit denen ich mich befassen muss?