Python - ascii编解码器无法解码位置0中的字节0xe3:序号不在范围内(128)

时间:2015-07-17 21:22:15

标签: python

我正在为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)

1 个答案:

答案 0 :(得分:2)

因此,您声明要将文件解析为unicode,但您的字符串仍需要声明为unicode字符串。为此,请在开头引号前加上小写u

respond(irc, u'ヽ༼ຈل͜ຈ༽ノ ' + riotmessage + u' OR RIOT ヽ༼ຈل͜ຈ༽ノ')

您可能希望安全并确保通过转换unicode来正确解析riotmessage。