我正在为Twitch.tv频道制作机器人,其中一个命令应该像这样工作:
用户输入:!riot(text)
机器人输出:ヽ(ຈ͜͜ຈ)ノ(文字)或RIOTヽ(ຈ͜͜ຈ)ノ
问题是每当有人试图输入命令时,cmd窗口中都会显示错误,其中显示:“ascii编解码器无法解码位置0中的字节0xe3:序号不在范围内(128)”。聊天中没有显示任何内容。
我在文件开头设置了UTF-8编码,所以我不确定为什么它会给我这个错误。
下面是命令本身的代码片段以及doCommandProcess的定义:http://imgur.com/a/R1G1e
下面是该命令的代码片段以及在以前版本的机器人中定义doCommandProcess,它可以正常工作:http://imgur.com/a/0tQpE
我真的很困惑,因为两个版本都使用UTF-8进行编码,并且代码几乎相同,但是一个拒绝工作并且给我一个ascii错误。
编辑:有问题的代码:def doCommandProcess( text, irc ):
try:
usernamearray = text.split('!')
username = usernamearray[0]
username = username[1:]
messagearray = text.split(':')
message = messagearray[2]
if(len(usernamearray) >= 0 and len(messagearray) >= 2):
sqlcommands.doCommand(message, irc)
customcommands.docustomcommands(message, irc)
print username + ": " + message
if commandStartsWith(message, '!riot'):
print len(message)
if(len(message) > 8):
riotmessage = message[6:]
riotmessage = riotmessage.strip().upper()
respond(irc, 'ヽ༼ຈل͜ຈ༽ノ ' + riotmessage + ' OR RIOT ヽ༼ຈل͜ຈ༽ノ')
else:
respond(irc, 'You need to give a reason to riot!')
except Exception,e:
#If an error happens
#Print a new line for visibility
print text
print ""
print str(e)
答案 0 :(得分:2)
因此,您声明要将文件解析为unicode,但您的字符串仍需要声明为unicode字符串。为此,请在开头引号前加上小写u
:
respond(irc, u'ヽ༼ຈل͜ຈ༽ノ ' + riotmessage + u' OR RIOT ヽ༼ຈل͜ຈ༽ノ')
您可能希望安全并确保通过转换unicode来正确解析riotmessage。