Как преобразовать URL escape-последовательности Unicode в Unicode Python? - PullRequest
0 голосов
/ 22 декабря 2010

Как правильно это сделать, если URL содержит несколько символов Юникода и экранируется на стороне клиента с помощью javascript (escape (текст))?Например, если мой URL-адрес: domain.com/?text=%u05D0%u05D9%u05DA%20%u05DE%u05DE%u05D9%u05E8%u05D9%u05DD%20%u05D0%u05EA%20%u05D4%u05D8%u05E7%u05E1% u05D8% 20% u05D4% u05D6% u05D4

Я пытался: text = urllib.unquote (request.GET.get ('text')), но я получил ту же самую строку назад (% u05D0% u05D9% u05DA% 20% u05DE ...)

Ответы [ 2 ]

3 голосов
/ 22 декабря 2010

в конечном итоге я изменил клиентскую сторону с escape (текст) на urlEncodeComponent (текст) а затем в сторону Python используется:

request.encoding = 'UTF-8' text = unicode (request.GET.get ('text', None))

Не уверен, что это лучше всего сделать, но он работает на английском и иврите

0 голосов
/ 30 июля 2015

Поскольку ваш% uxxxx не является стандартом Python, то есть \ uxxxx, вам нужно хитрое преобразование, чтобы заменить '%' на '\', как показано ниже (проверено в моей оболочке Python):

>>> import sys; reload(sys); sys.setdefaultencoding('utf8')
<module 'sys' (built-in)>
>>> text = '%u05D0%u05D9%u05DA%20%u05DE%u05DE%u05D9%u05E8%u05D9%u05DD%20%u05D0%u05EA%20%u05D4%u05D8%u05E7%u05E1%u05D8%20%u05D4%u05D6%u05D4'
>>> text = text.replace('%', '\\')
>>> text_u = text.decode('unicode-escape')
>>> print text_u
איךממיריםאתהטקסטהזה

После преобразования в тип Unicode вы можете затем преобразовать его в любую кодировку, как вам нравится, следующим образом:

>>> text_utf8 = text_u.encode('utf8')
>>> text_utf8
'\xd7\x90\xd7\x99\xd7\x9a\x10\xd7\x9e\xd7\x9e\xd7\x99\xd7\xa8\xd7\x99\xd7\x9d\x10\xd7\x90\xd7\xaa\x10\xd7\x94\xd7\x98\xd7\xa7\xd7\xa1\xd7\x98\x10\xd7\x94\xd7\x96\xd7\x94'
>>> print text_utf8
איךממיריםאתהטקסטהזה
...