如何:Twisted privmsg接受非ascii字符串

时间:2011-07-18 13:53:19

标签: python unicode encoding twisted

我有一个用python编写的IRC机器人,它使用Twisted。

它可以打印非ascii字符串,而self.msg(channel, str.encode('utf-8')没有问题。

但是,当使用privmsg收到非ascii字符串时,我会遇到异常:

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)

有没有人知道如何在privmsg收到的msg上强制编码为UTF-8?

1 个答案:

答案 0 :(得分:3)

我认为你想要“解码”,而不是“编码”。 privmsg的参数是字节字符串(str,在python 2.x中),因此如果您希望它是文本,则必须 de - 对这些字节进行编码。

您无法强制编码为UTF-8,因为编码是您从服务器接收的任何内容。由于IRC完全没有字符集支持,这是你能做到的最好的。