LINUX.ORG.RU

Python&Django и Unicode


0

0

Добрый вечер.
Есть скрипт на питоне, который отправляет http запрос с параметрами:
# i[0] - уникодная строка с русскими и не только символами
params = urllib.urlencode({"Title":urllib.quote(i[0].encode('utf-8')),....})
# print i[0] печатает норм строку.
На джанго сервер.
Там он ловится вот так:
ScrobbleForm = ScrobbleMusicForm(request.POST)
a = urllib.unquote(ScrobbleForm.cleaned_data['Title'])
NewRow = sMusic(Title = a,....)
NewRow.save()

Однако в базе лежит какая то белиберда :\
А если сделать:
a = "Юникодный стринг"
NewRow = sMusic(Title = a,....)
NewRow.save()
то в базе будет "Юникодный стринг"

Что я делаю не так не пойму, т.к. в шелле unquote(quote(string.encode('utf-8'))) дает string.
?


Да, забыл, python2.5
Django version 0.97-pre-SVN-unknown сегодня из свн выкачивал.

nnkd
() автор топика

i[0].encode('utf-8') -- с какой целью здесь перекодировка? попробуйте убрать, строка же и так в юникоде.

vden ★★
()
Ответ на: комментарий от vden

Если убираю encode('utf-8') то:
Exception in thread Thread-1:
Traceback (most recent call last):
File "threading.py", line 460, in __bootstrap
self.run()
File "threading.py", line 625, in run
self.function(*self.args, **self.kwargs)
File "./scrobble.py", line 30, in SendScrobbled
"Title":urllib.quote(i[0]),
File "urllib.py", line 1205, in quote
res = map(safe_map.__getitem__, s)
KeyError: u'\u0440'

nnkd
() автор топика
Ответ на: комментарий от nnkd

>>> params = urllib.urlencode({"Test":urllib.quote(u'Епт')})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/urllib.py", line 1205, in quote
res = map(safe_map.__getitem__, s)
KeyError: u'\u0415'

nnkd
() автор топика
Ответ на: комментарий от vden

Такого типа: "7 раса - 7 раса - КачелÐ"
В админке так отображается, и если самому выводить.

nnkd
() автор топика
Ответ на: комментарий от nnkd

причем в базу оно уже такое ложиться.
Т.е. перед отправкой выполняется quote()
выполняется unquote() и выводится в консоль (utf-8) нормально
При получении из request выполняется unquote и выводится в консоль криво.

nnkd
() автор топика
Ответ на: комментарий от vden

Эх.. все равно спасибо ) буду дальше ее мучить.

nnkd
() автор топика

Проблема решилась наугад путем замены request.POST['Title'] на request.POST['Title'].encode('utf-8')

nnkd
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.