Уведомления

Группа в Telegram: @pythonsu

#1 Июль 5, 2009 22:39:41

idler
От:
Зарегистрирован: 2009-07-05
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Qt4,httplib, отправка через POST

Я в python новичок, однако немного программировал на PHP, JavaScript (как для веб страниц так и для XUL) , чуть знаю C

Решил попробовать Python и сделать что-то полезное.
Есть такой Twitter-клиент h-twt
Я добавли к нему немного функциональности, научил его отображать timeline в примитивном виде.
И обнаружил, что не могу отправлять в твиттер посты на русском.

Полный исходник тут: http://www.maxantonov.name/MyTwitting.html

Текст для отправки я получаю из QTextEdit
Фрагмент кода:

 def postTweet(self):
mesg = self.txt.toPlainText()
post = urllib.urlencode({ 'status' : mesg })
try:
http = httplib2.Http()
http.force_exception_to_status_code = False
http.add_credentials(self.username, self.password)
resp, content = http.request(self.twitUpdate, 'POST', post)
Ошибка:
max@desktop:~$ htwt
Traceback (most recent call last):
File "/home/max/bin/htwt", line 27, in postTweet
post = urllib.urlencode({ 'status' : mesg })
File "/usr/lib/python2.6/urllib.py", line 1265, in urlencode
v = quote_plus(str(v))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)
Ясно что дело в кодировках, только в документации я не нашел ничего кроме unicode(string,encoding)
Пробовал применять unicode к значению поля ввода перед отправкой, но в твиттере только знаки вопроса.

Подскажите, куда копать?
системная локаль: ru_RU.UTF-8



Офлайн

#2 Июль 6, 2009 00:15:20

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Qt4,httplib, отправка через POST

Попробуйте сделать mesg = unicode(self.txt.toPlainText()).encode('utf-8')



Офлайн

#3 Июль 6, 2009 09:09:44

idler
От:
Зарегистрирован: 2009-07-05
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Qt4,httplib, отправка через POST

Большое спасибо. Получилось.
А можно ли ссылку на почитать - что все это значит?



Офлайн

#4 Июль 6, 2009 09:27:25

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Qt4,httplib, отправка через POST

Вы пытались передать данные в юникоде (Qt-шный QString, возвращаемый методом toPlainText(), это аналог юникодовой строки), заранее не закодировав их в нужную кодировку для передачи через HTTP протокол. Пока следует оборачивать результат функций в unicode(), а в дальнейшем это исправят и можно будет писать mesg = self.txt.toPlainText().encode('utf-8').



Офлайн

#5 Июль 6, 2009 15:11:36

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Qt4,httplib, отправка через POST

poltergeist
а в дальнейшем это исправят и можно будет писать mesg = self.txt.toPlainText().encode('utf-8')
Этого иногда очень не хватает… Откуда такие данные?



Офлайн

#6 Июль 6, 2009 19:45:59

idler
От:
Зарегистрирован: 2009-07-05
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Qt4,httplib, отправка через POST

ZZZ
Этого иногда очень не хватает… Откуда такие данные?
Прежде чем браться за Python я естественно почитал книгу.
Книга была по Python3 там было сказано, что в третьем все строки в utf8.
Насколько я понимаю это и есть эти данные. Верно???



Офлайн

#7 Июль 6, 2009 20:35:11

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Qt4,httplib, отправка через POST

idler Нет, мы тут про другие строки говорим. Все Qt-шные функции работают сейчас не с питоновскими строками, а с классом QString. Просто PyQt автоматом конвертирует QString в unicode, а QByteArray в str. В будущих версиях PyQt таких классов как QChar, QString, QByteArray, QVariant, QDate, QTime, … уже не будет, они будут заменены своими питонскими аналогами. В python 3.0 это будет очень уместно, QString -> str, QByteArray -> bytes - типы данных почти один в один повторяют друг друга.

ZZZ Почитай roadmap на сайте ривербанка, там много интересного по части запланированных фич.



Отредактировано (Июль 6, 2009 20:38:19)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version