Как я могу получить символы Юникода из параметра URL? - PullRequest
3 голосов
/ 17 декабря 2010

Мне нужно использовать GET-запрос для отправки JSON на мой сервер через клиент JavaScript, поэтому я начал возвращать ответы, чтобы убедиться, что при переводе ничего не потеряно. Кажется, с обычным текстом проблемы не возникает, но как только я включаю какой-либо символ Unicode (например, «ç»), символ как-то кодируется (например, «\ u00e7»), и возвращаемое значение отличается от значение запроса. Моя главная проблема заключается в том, что A) В моем коде Python сохраняет то, что клиент намеревался при отправке в базу данных правильно, и B) Я возвращаю клиенту те же значения, которые были отправлено (при тестировании).

Возможно, это означает, что я не могу использовать base64, или мне нужно сделать что-то другое по пути. Я в порядке с этим. Моя реализация - просто попытка средства для достижения цели.

Текущие шаги (при необходимости можно изменить любой шаг):

Необработанная строка JSON, которую я хочу отправить на сервер:

'{"weird-chars": "°ç"}'

JavaScript Кодированная в Base64 версия строки, передаваемой на сервер через параметр GET (примечание: будет ли знак равенства в конце кодированной строки вызывать какие-либо проблемы?):

http://www.myserver.com/?json=eyJ3ZWlyZC1jaGFycyI6ICLCsMOnIn0=

Python str результат от b64decode параметра:

'{"weird-chars": "\xc2\xb0\xc3\xa7"}'

Python dict из json.loads расшифрованного параметра:

{'weird-chars': u'\xb0\xe7'}

Python str из json.dumps этого dict (и последующий вывод в браузер):

'{"weird-chars": "\u00b0\u00e7"}'

Ответы [ 2 ]

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

Ваша процедура в порядке, вам просто нужно сделать еще один шаг;то есть кодирование из Unicode в utf-8 (или любую другую кодировку, которая поддерживает «странные символы».)

Думайте о декодировании как о том, что вы делаете, чтобы перейти от обычной строки до Unicode и кодировка как то, что вы делаете, чтобы вернуть из Unicode.Другими словами:

Вы de - код str для получения unicode строки

и en - код a unicode строка для получения str.

Итак:

params = {'weird-chars': u'\xb0\xe7'}

encodedchars = params['weird-chars'].encode('utf-8')

encodedchars будет содержать ваши символы, отображаемые в выбранной кодировке (в данном случае utf-8).

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

Все выглядит хорошо для меня.

>>> hex(ord(u'°'))
'0xb0'
>>> hex(ord(u'ç'))
'0xe7'

Возможно, вам следует декодировать JSON, прежде чем пытаться его использовать.

...