Расшифровка юникода из Javascript в Python & Django - PullRequest
1 голос
/ 02 декабря 2010

На веб-сайте у меня есть слово pluș, отправленное через POST для просмотра в Django. Отправляется как plu%25C8%2599. Поэтому я взял эту строку и попытался выяснить, как сделать %25C8%2599 обратно в ș.

Я попытался расшифровать строку следующим образом:

from urllib import unquote_plus
s = "plu%25C8%2599"
print unquote_plus(unquote_plus(s).decode('utf-8'))

В результате я получаю pluÈ, который на самом деле имеет длину 5, а не 4.

Как получить исходную строку pluș после того, как она закодирована?

редактирование:

Мне удалось сделать это так

def js_unquote(quoted):
  quoted = quoted.encode('utf-8')
  quoted = unquote_plus(unquote_plus(quoted)).decode('utf-8')
  return quoted

Это выглядит странно, но работает так, как мне нужно.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2010

URL-декодирование дважды, , затем декодирование как UTF-8.

1 голос
/ 02 декабря 2010

Вы не можете, если не знаете, что такое кодировка. Сам по себе Unicode не является кодировкой. Вы можете попробовать BeautifulSoup или UnicodeDammit, которые могут помочь вам получить результат, на который вы надеялись.

http://www.crummy.com/software/BeautifulSoup/

Надеюсь, это поможет!

Также взгляните на:

http://www.joelonsoftware.com/articles/Unicode.html

0 голосов
/ 11 декабря 2012
unquote_plus(s).encode('your_lang_encoding')

Я пытался так. Я пытался отправить запрос JSON POST с помощью HTML-формы непосредственно на URI django, который включает символы Юникода, такие как "şğüöçı+", и это работает. Я использовал iso_8859-9 кодировщик в функции encode().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...