Ошибка Unicode в urllib.urlencode - в моем веб-приложении Django - PullRequest
2 голосов
/ 24 февраля 2012

\ Hi All,

Пользователь вводит значение Unicode (u '\ u2206') в текстовое поле, которое передается моему представлению django.Представление использует данные GET для генерации URL, чтобы позже вернуться на страницу поиска.

При создании URL-адреса возникают проблемы, когда пользователь отправляет символ в кодировке Unicode.

Какова лучшая практика здесь.Должен ли я кодировать данные перед отправкой в ​​urlencode?Какую кодировку мне следует использовать?

Соответствующий код:

search_form = SearchForm(request.GET)
get_data = dict([(key,item) for (key,item) in search_form.data.items()])
get_params = '&' + urllib.urlencode(query=get_data.items())

Ошибка: обратная связь (последний вызов был последним):

  File "/opt/python/lib/python2.7/site-packages/django/core/handlers/base.py", line 100, in get_response
    response = callback(request, *callback_args, **callback_kwargs)

  File "/opt/python/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 25, in _wrapped_view
    return view_func(request, *args, **kwargs)

  File "/opt/DjangoProjects/Fly/FlyStore/views.py", line 465, in search
    get_params = '&' + urllib.urlencode(query=get_data.items())

  File "/opt/python/lib/python2.7/urllib.py", line 1282, in urlencode
    v = quote_plus(str(v))

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2206' in position 15: ordinal not in range(128)

1 Ответ

6 голосов
/ 24 февраля 2012

Кодировать как UTF-8 перед URL-кодированием.

...