You need to enable JavaScript to run this app. Discord bot运行中途出现charmap解码UnicodeDecodeError错误如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Discord bot运行中途出现charmap解码UnicodeDecodeError错误如何解决?

报错原因

你遇到的UnicodeDecodeError本质是文件读取模式使用错误:
你读取的.pkl是Python pickle序列化生成的二进制文件,而你调用open()时用了默认的文本模式r,这种模式下Python会自动用当前运行环境的默认编码解码文件内容。你当前是Windows系统,从Atom启动时Python继承的默认编码是cp1252(也就是报错中的charmap编码),读取到pkl文件中0x8d这类不存在于cp1252映射表中的字节时,就会触发解码失败。

修复方案
  • 最根本的修改是把所有读取.pkl文件的open模式从文本模式r改成二进制读模式rb,二进制模式下不会做编码解码,直接对比字节内容即可,修改后的代码行如下:
if open("totpal_guilds/" + message.guild.name + ".pkl", "rb").read() == open("totpal_guilds/kort_dummy.pkl", "rb").read():
  • 后续如果需要反序列化读取pkl的内容,也需要用rb模式打开文件后调用pickle.load()处理,不要用文本模式直接读取内容。
  • 额外建议:不要直接用message.guild.name作为文件名,服务器名称可能包含emoji、特殊符号、斜杠等非法路径字符,容易触发文件读写异常,改用唯一且无特殊字符的服务器IDmessage.guild.id作为文件名会更稳定。
中途突然报错的原因

之前运行正常是因为此前触发判断逻辑的pkl文件内容刚好所有字节都能被当时运行环境的默认编码识别,出现报错大概率是两种情况:

  1. bot新加入了名称带特殊字符的服务器,或者旧有服务器修改了名称,生成的对应pkl文件中出现了cp1252无法解码的字节;
  2. 之前启动bot的环境默认编码是UTF-8,能识别的字节范围比cp1252更广,这次从Atom启动时环境默认编码变成了cp1252,之前能正常解码的内容现在无法解码。

内容的提问来源于stack exchange,提问作者Mymokol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:06:04