You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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) => {
  // 回调逻辑保持不变
});

额外优化建议

  1. 简化表情定义:你当前的十六进制转义是正确的,但也可以直接使用表情字符,代码可读性更高,只要你的代码文件保存为UTF-8编码即可:
    const _emojis = {
      throwingAKiss: '😘',
      tearsOfJoy: '😂',
      smirkingFace: '😏'
    }
    
  2. 验证文件编码:确保你的.js文件是以UTF-8编码保存的(大多数编辑器默认就是这个编码,但可以在设置里确认),避免表情字符在文件层面就出现编码错误。

这样修改后,表情符号就能被Telegram正确识别并显示了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:05:59