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