Как: Twisted Privmsg принимать строки не-ASCII - PullRequest
1 голос
/ 18 июля 2011

У меня есть IRC-бот, написанный на python, который использует Twisted.

Он может печатать строки не в формате ascii без проблем с self.msg(channel, str.encode('utf-8').

Однако я получаю исключения, когда-ascii строка получена с privmsg:

def privmsg(self, user, channel, msg):
    msg = msg.encode('utf-8')
    user = user.split('!', 1)[0]
    [... code goes here...]

Я получаю следующее исключение:

 File "/usr/lib64/python2.4/site-packages/twisted/words/protocols/irc.py", line 1498, in handleCommand
  method(prefix, params)
File "/usr/lib64/python2.4/site-packages/twisted/words/protocols/irc.py", line 1043, in irc_PRIVMSG
  self.privmsg(user, channel, message)
File "./IlyBot.py", line 58, in privmsg
  msg = msg.encode('utf-8')
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 4: ordinal not in range(128)

Кто-нибудь знает, как заставить кодировку быть UTF-8 в полученном сообщенииот privmsg?

1 Ответ

3 голосов
/ 18 июля 2011

Я думаю, что вы хотите "декодировать", а не "кодировать". Аргументом privmsg является строка байтов (str, в python 2.x), поэтому, если вы хотите, чтобы это был текст, вы должны de кодировать эти байты.

Вы не можете заставить кодировку быть UTF-8, потому что кодировка - это то, что вы случайно получили от сервера. Благодаря полному отсутствию поддержки набора символов IRC, это лучшее, что вы можете сделать.

...