非標準の%uxxxxスキームを知っていますが、このスキームはW3Cによって拒否されているため、賢明な選択とは思えません。
いくつかの興味深い例:
ハートのキャラクター。これをブラウザに入力すると:
http://www.google.com/search?q=♥
次に、コピーして貼り付けます。このURLが表示されます
http://www.google.com/search?q=%E2%99%A5
これにより、Firefox(またはSafari)がこれを実行しているように見えます。
urllib.quote_plus(x.encode("latin-1"))
'%E2%99%A5'
トリプルドット文字のように、Latin-1でエンコードできないものを除いて、これは理にかなっています。
…
URLを入力すると
http://www.google.com/search?q=…
ブラウザにコピーして貼り付けます
http://www.google.com/search?q=%E2%80%A6
バック。それはやっての結果のようです
urllib.quote_plus(x.encode("utf-8"))
…Latin-1でエンコードできないため、これは理にかなっています。
しかし、ブラウザがUTF-8とLatin-1のどちらでデコードするかをどのように判断するかは、はっきりしていません。
これはあいまいなようですので:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
動作するので、ブラウザがUTF-8またはLatin-1のいずれでデコードするかをブラウザがどのように判断するのかわかりません。
処理する必要がある特殊文字をどのように処理すればよいですか?