Я знаю о нестандартной схеме% 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'
что имеет смысл, за исключением вещей, которые не могут быть закодированы в латинском-1, как символ тройной точки.
…
Если я наберу URL
http://www.google.com/search?q=…
в мой браузер, затем скопируйте и вставьте, я получаю
http://www.google.com/search?q=%E2%80%A6
назад. Кажется, что это результат выполнения
urllib.quote_plus(x.encode("utf-8"))
что имеет смысл, поскольку... невозможно закодировать с помощью латинского-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.
Какая правильная вещь для специальных символов, с которыми мне нужно иметь дело?