如何使用Node.js request模块正确编码表情符号发送给Telegram Bot
解决Telegram Bot消息中表情符号显示异常的问题
嘿,我来帮你搞定这个表情显示成冒号的问题!这个问题的核心是请求格式和编码的不匹配,咱们一步步来解决:
问题根源分析
你当前的代码里同时使用了formData参数和Content-Type: application/json请求头,这两者是冲突的:
formData会让request模块自动把请求头设为multipart/form-data,但你手动覆盖成了application/json,导致数据编码混乱,表情符号的UTF-8编码被错误解析,最终显示成了冒号。- Telegram Bot API要求接收JSON格式的请求体,所以用
formData本身就不符合接口要求。
解决方案:改用JSON格式发送请求
直接把formData替换成json参数,request模块会自动处理JSON序列化、UTF-8编码和正确的请求头,代码修改如下:
request.post({ url: `${this.getApiURL()}/${apiName}`, json: payload, // 用json参数传递数据,自动处理序列化和编码 headers: { 'Charset': 'utf-8' // 可选,request会自动添加正确的charset } }, (err, resp, body) => { // 回调逻辑保持不变 });
额外优化建议
- 简化表情定义:你当前的十六进制转义是正确的,但也可以直接使用表情字符,代码可读性更高,只要你的代码文件保存为UTF-8编码即可:
const _emojis = { throwingAKiss: '😘', tearsOfJoy: '😂', smirkingFace: '😏' } - 验证文件编码:确保你的.js文件是以UTF-8编码保存的(大多数编辑器默认就是这个编码,但可以在设置里确认),避免表情字符在文件层面就出现编码错误。
这样修改后,表情符号就能被Telegram正确识别并显示了!
内容的提问来源于stack exchange,提问作者Donovant
相关产品推荐
相关产品推荐

