Я знаю о нестандартной схеме% 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.
Что правильно делать со специальными символами, с которыми мне нужно иметь дело?