我有一个用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?
答案 0 :(得分:3)
我认为你想要“解码”,而不是“编码”。 privmsg
的参数是字节字符串(str
,在python 2.x中),因此如果您希望它是文本,则必须 de - 对这些字节进行编码。
您无法强制编码为UTF-8,因为编码是您从服务器接收的任何内容。由于IRC完全没有字符集支持,这是你能做到的最好的。