我知道非标准的% 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'
which makes sense, except for things that can't be encoded in Latin-1, like the triple dot character.
…
如果我输入 URL
http://www.google.com/search?q=…
然后复制粘贴,我得到
http://www.google.com/search?q=%E2%80%A6
回来。这似乎是做的结果
urllib.quote_plus(x.encode("utf-8"))
这就说得通了,因为... 不能用拉丁文编码。
But then its not clear to me how the browser knows whether to decode with UTF-8 or Latin-1.
由于这似乎是模棱两可的:
In [67]: u"…".encode('utf-8').decode('latin-1')
Out[67]: u'\xc3\xa2\xc2\x80\xc2\xa6'
工作,所以我不知道浏览器如何计算出是否解码与 UTF-8或拉丁文 -1。
怎样处理我需要处理的特殊人物才是正确的呢?