Форум сайта python.su
Я в 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)
Офлайн
Попробуйте сделать mesg = unicode(self.txt.toPlainText()).encode('utf-8')
Офлайн
Большое спасибо. Получилось.
А можно ли ссылку на почитать - что все это значит?
Офлайн
Вы пытались передать данные в юникоде (Qt-шный QString, возвращаемый методом toPlainText(), это аналог юникодовой строки), заранее не закодировав их в нужную кодировку для передачи через HTTP протокол. Пока следует оборачивать результат функций в unicode(), а в дальнейшем это исправят и можно будет писать mesg = self.txt.toPlainText().encode('utf-8').
Офлайн
poltergeistЭтого иногда очень не хватает… Откуда такие данные?
а в дальнейшем это исправят и можно будет писать mesg = self.txt.toPlainText().encode('utf-8')
Офлайн
ZZZПрежде чем браться за Python я естественно почитал книгу.
Этого иногда очень не хватает… Откуда такие данные?
Офлайн
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)
Офлайн