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

如何通过Telegram Bot API发送含Emoji的文件名文件?

解决Telegram Bot API发送带Emoji文件名丢失的问题

requests默认处理multipart上传的文件名时,会把非ASCII字符(比如💎)过滤掉,得用RFC 5987规定的编码格式指定文件名,Telegram Bot API能识别这个格式。

具体代码修改

估计你原来的代码是类似这样的:

import requests

TOKEN = "你的机器人令牌"
CHAT_ID = "目标聊天ID"

with open("diamond💎.txt", "rb") as f:
    requests.post(
        f"https://api.telegram.org/bot{TOKEN}/sendDocument",
        data={"chat_id": CHAT_ID},
        files={"document": ("diamond💎.txt", f)}
    )

改成下面的写法,用标准编码格式处理文件名:

import requests
from urllib.parse import quote

TOKEN = "你的机器人令牌"
CHAT_ID = "目标聊天ID"
original_filename = "diamond💎.txt"
# 按照RFC 5987标准编码文件名
encoded_filename = f"filename*=utf-8''{quote(original_filename)}"

with open(original_filename, "rb") as f:
    response = requests.post(
        f"https://api.telegram.org/bot{TOKEN}/sendDocument",
        data={"chat_id": CHAT_ID},
        # 第三个参数是文件MIME类型,文本文件填text/plain即可
        files={"document": (encoded_filename, f, "text/plain")}
    )

原理说明

手动在Telegram客户端发文件时,客户端会按照HTTP标准的multipart/form-data格式,正确编码带Emoji的文件名;但requests默认处理文件名时,会错误过滤非ASCII字符,导致Telegram只收到纯ASCII部分(也就是diamond.txt)。用RFC 5987的编码格式后,Telegram就能正确解析出带Emoji的完整文件名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:50:36