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

urllib构造含emoji的URL调用Telegram接口报UnicodeEncodeError

问题根因
  • 认知偏差:emoji不属于ASCII字符范畴,标准ASCII字符集仅覆盖序号0-127的基础西文字符,你使用的🚨属于多字节Unicode字符,完全不在ASCII支持范围内。
  • 逻辑缺陷:手动通过replace(" ", "%20")仅能完成空格的替换,无法对emoji、中文、其他特殊符号做合规的URL百分号编码,urllib.request.urlopen默认使用ASCII编码解析URL,碰到未编码的非ASCII字符时就会抛出你遇到的编码错误。
修复方案

不要手动拼接URL参数、手动做字符替换,直接使用Python标准库urllib.parse提供的urlencode方法自动完成所有参数的合规编码,从根源规避编码问题,可直接替换运行的代码如下:

import urllib.request
import urllib.parse

botMessage = '🚨'
# 将查询参数统一存入字典,交由标准库自动完成编码
request_params = {
    "chat_id": chat_id,
    "text": botMessage
}
# 拼接接口地址与编码后的参数
request_url = f"https://api.telegram.org/bot{telegram_token}/sendMessage?{urllib.parse.urlencode(request_params)}"

urllib.request.urlopen(request_url)

说明:urllib.parse.urlencode会自动按照URL规范处理所有字符的编码,包括空格、emoji、中文、各类特殊符号,不需要额外做手动替换。Telegram Bot API原生支持emoji消息,只要URL编码符合规范即可正常发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:54:26