-
Здравствуйте.
Хочу разобраться, что именно страдает: реализация OpenID консьюмера в библиотеке python-openid или openid.yandex.ru.
Выполняем по шагам...
- Заходим на http://openidenabled.com/python-openid/trunk/examples/consumer/ (пример консьюмера).
- Вводим openid.yandex.ru.
- Говорим Яндексу "Передать дополнительные данные", среди которых будет псевдоним, который необходимо заполнить русскими буквами.
... и получаем ошибку:
UnicodeDecodeError at /consumer/finish/ 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)Конкретно ругается на строку кодирования в utf-8.
for (ns_uri, ns_key), value in self.args.iteritems(): key = self.getKey(ns_uri, ns_key) args[key] = value.encode('UTF-8')Если я правильно понял спецификацию, то сообщения и данные форм должны быть представлены в кодировке utf-8. Яндекс так данные и передаёт:
openid.sreg.nickname '\xd0\x94\xd0\xbc\xd0\xb8\xd1\x82\xd1\x80\xd0\xb8\xd0\xb9 \xd0\x9a\xd1\x83\xd1\x80\xd0\xb8\xd0\xbb\xd0\xbe\xd0\xb2'А приведённый выше кусок кода пытается кодировать значения в utf-8, как будто они декодированы.
Заранее спасибо.
-
Это консумер из example глючит, мы на это наталкивались, когда сервер тестировали. Ошибка очень простая, там где-то в потрохах строка к юникоду приводится через умолчальную кодировку (ascii), а не utf-8. Потому и падает на русских символах.
В принципе, можно просто передавать ascii-строки в SRE, для отладки ведь это не принципиально.
-
Ясно.
Спасибо.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

