Token编码运行报错:JSON解码遇UTF-8 BOM问题求助
解决Discord.py机器人的JSON解码错误及Token格式问题
错误根源
- UTF-8 BOM冲突:你的JSON文件开头带有UTF-8 BOM标记,Python默认的
utf-8编码读取时不会忽略该标记,导致JSON解析器无法识别文件开头字符,抛出JSONDecodeError。 - Token转义错误:JSON中的Token使用了
/x而非正确的\x十六进制转义符,还有一处笔误x3/6x32(应为\x36\x32),这会导致Token无法被正确解析为有效字符串。
解决方案
1. 修复文件读取编码
将读取JSON的代码中encoding='utf-8'改为encoding='utf-8-sig',该编码会自动处理UTF-8 BOM:
with open('data/config.json', 'r', encoding='utf-8-sig') as doc: config = json.load(doc)
2. 修正Token格式
把JSON中所有/x替换为\x,同时修正笔误x3/6x32为\x36\x32,修正后的JSON内容如下:
{"token":"\x4d\x54\x41\x7a\x4f\x44\x6b\x32\x4f\x44\x59\x33\x4d\x44\x59\x79\x4d\x7a\x4d\x33\x4f\x54\x51\x34\x4f\x41\x2e\x47\x76\x4e\x6a\x33\x47\x2e\x53\x66\x41\x52\x64\x46\x78\x4a\x6d\x6a\x67\x6c\x58\x4e\x4e\x61\x65\x56\x35\x78\x57\x6e\x62\x36\x32\x53\x41\x32\x38\x67\x54\x2d\x51\x4d\x5f\x64\x69\x41"}
更简单的方式是直接使用明文Token:先将转义后的十六进制字符串解码为明文(解码后为MTAzODk2ODY3MzMDYyMzOTQ4OA.GvNj3G.SfARdFxJmjglXNNaeV5xWnb62SA28gT-QM_diA),再写入JSON:
{"token": "MTAzODk2ODY3MzMDYyMzOTQ4OA.GvNj3G.SfARdFxJmjglXNNaeV5xWnb62SA28gT-QM_diA"}
3. 验证JSON格式合法性
修改后可通过以下代码验证JSON是否有效:
import json try: with open('data/config.json', 'r', encoding='utf-8-sig') as f: json.load(f) print("JSON格式有效") except json.JSONDecodeError as e: print(f"JSON格式错误: {e}")
额外提示
- 保存JSON文件时,在编辑器中选择UTF-8无BOM格式,避免再次出现BOM问题。
- Discord Token为敏感信息,不要提交到公共代码仓库,建议用环境变量管理Token:
import os from dotenv import load_dotenv load_dotenv() token = os.getenv('DISCORD_TOKEN')
内容的提问来源于stack exchange,提问作者ArcticFox1045
相关产品推荐
相关产品推荐

