我有一个使用Twisted用Python编写的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完全缺乏字符集支持,所以这是您可以做的最好的事情。