Я знаю о нестандартной схеме% uxxxx, но это не кажется мудрым выбором, поскольку схема была отвергнута W3C.Что такое правильный URL-адрес для кодирования символов Unicode?
Некоторые интересные примеры:
Сердце характер. Если я печатаю это в моем браузере:
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, как символ тройной точки.
…
Если я введите адрес
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.
Что нужно делать с особыми символами, с которыми мне нужно иметь дело?
Оба примера кодируются как UTF-8. Первый, конечно, не латинский-1, учитывая, что он имеет длину в три байта ... –
% E2% 99% A5 является шестнадцатеричным для байтовых значений [«черный костюм сердца» в UTF-8] (http: // www. ltg.ed.ac.uk/~richard/utf-8.cgi?input=E2+99+A5&mode=bytes). Это черное сердце не входит в набор символов [Latin-1 character] (http://en.wikipedia.org/wiki/ISO/IEC_8859-1). –
Чтобы надежно видеть, как и что кодирует браузер (и много другой полезной информации), используйте инструменты разработчика, встроенные в большинство современных браузеров, или получите бесплатный HTTP-отладчик, такой как [Fiddler] (http: //www.telerik .com/стелька). –