我有一个使用Twisted用Pyt​​hon编写的IRC机器人。

它可以打印非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接收的味精上强制将编码设为UTF-8?

最佳答案

我认为您要“解码”,而不是“编码”。 privmsg的参数是一个字节字符串(在python 2.x中为str,因此,如果要将其作为文本,则必须对这些字节进行解码。

您不能将编码强制为UTF-8,因为编码恰好是您从服务器接收的。由于IRC完全缺乏字符集支持,所以这是您可以做的最好的事情。

10-08 15:49