所以我试着设计一个简单的Twitch.tv IRC机器人。bot在通道中读取传入的消息,如果消息与某些模式匹配,bot将执行某些任务。我所遇到的问题是,如果用户输入某些unicode字符(即,如果用户输入“¯_(ツ)_/ if”,程序将抛出错误并崩溃:
UnicodeEncodeError未被用户代码处理
“‘charmap”编解码器不能对位置13中的字符'\xaf’进行编码:字符映射到<未定义>
现在,我希望我的程序能够处理这些输入,但我不知道如何修改或添加到我的代码中来启用它。这是我的密码:
http://pastebin.com/EBTaqpbZ (我不知道如何使用堆栈溢出代码粘贴)
我收到的错误代码的主要部分是:
while True: #Main Loop
response = s.recv(1024).decode("utf-8")
if response == "PING :tmi.twitch.tv\r\n": #If Ping, return Pong
s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
print("Pong Successful")
else: #Else, Decode User Message
username = re.search(r"\w+", response).group(0) #Gets User
message = CHAT_MSG.sub("", response) #Gets Message
print (username + ": " + message) #Prints User Message
if message.find("!hello") != -1: #Simple Test command to see if Reading Chat Input
chat ("Hello! I'm speaking!\r\n")
time.sleep(1 / cfg.RATE)错误似乎总是发生在代码行:print (username + ": " + message)
有人知道我应该如何处理这些unicode字符吗?
发布于 2016-09-18 20:43:57
(我会发表评论,链接到答案,但我还没有足够的声誉。)
所以我猜你是在用窗户吧?所发生的情况是,控制台使用的编码无法打印unicode字符,这将导致崩溃。
所以问题不在于代码本身,而在于所使用的工具。例如,当从linux控制台运行时,代码运行良好。解决此问题的一种方法似乎是使用win-unicode-控制台从windows控制台启用unicode输入和输出。有关问题和解决方案的更广泛描述,请参见这个答案。
如果您只需要打印以进行调试,您也可以绕过这个问题:
msg = username + ": " + message
print (msg.encode("utf-8")) 但是,这不是一个真正的解决方案,输出将类似于
b'\xc2\xaf_(\xe3\x83\x84)_/\xc2\xaf\r\n‘
对于您的示例字符串,所以不太方便。我建议阅读我所链接的答案。
https://stackoverflow.com/questions/39561354
复制相似问题