所以我正在尝试编写一个简单的Twitch.tv IRC机器人。机器人读取通道中的传入消息,如果消息与某些模式匹配,则机器人执行某些任务。我得到的问题是,如果用户输入某些unicode字符(即如果用户输入“¯_(ツ)_ /¯”,程序将抛出错误并崩溃:
UnicodeEncodeError未被用户代码
处理'charmap'编解码器无法对位置13中的字符'\ xaf'进行编码:字符映射到< undefined>
现在,我希望我的程序能够处理这些输入,但我不知道要更改或添加到我的代码中以启用此功能。这是我的代码:
http://pastebin.com/EBTaqpbZ(我无法弄清楚如何使用Stackoverflow代码粘贴)
我收到错误的代码的主要部分是:
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字符?
答案 0 :(得分:1)
(会回复一个答案的链接,但我还没有足够的声誉。)
那么,我假设您正在使用Windows?发生的事情是控制台使用的编码无法打印unicode字符,这会导致崩溃。
所以问题不在于代码本身,而在于使用的工具。例如,从Linux控制台运行时代码运行正常。解决此问题的一种方法似乎是使用win-unicode-console来启用Windows控制台的unicode输入和输出。有关问题和解决方案的更详细说明,请参阅this answer。
如果你只是需要打印用于调试目的,你也可以解决这个问题:
msg = username + ": " + message
print (msg.encode("utf-8"))
但是,这不是一个真正的解决方案,输出将类似于
B' \ XC2 \ XAF _(\ XE3 \ X83 \ X84)_ / \ XC2 \ XAF \ r \ n'
为您的示例字符串,所以不太方便。我建议阅读我链接的答案。