如何在Python中设置文本加粗?及Telegram Bot API发送图片时标题加粗失败问题排查求助
解决Telegram Bot API中标题加粗的问题
首先,你的问题出在MarkdownV2语法使用错误和GET请求参数未正确编码这两个地方,我来一步步帮你修正:
1. 错误原因分析
你当前的caption写法是*bold\*{title}*,这不符合Telegram MarkdownV2的规则:
- MarkdownV2要求加粗内容必须用两个连续的星号包裹,也就是
**需要加粗的文本**,而不是单个星号; - 你额外加的
\*是多余的转义,反而会导致解析混乱; - 直接把参数拼在GET URL里,如果
title或res包含特殊字符(比如空格、&、?等),会被服务器错误解析,导致API请求失败。
2. 修正后的代码示例
方式一:使用GET请求(需正确编码参数)
建议用urllib.parse.quote来编码所有需要传入URL的文本参数,避免特殊字符问题:
import requests from urllib.parse import quote # 先对标题进行MarkdownV2加粗格式化,再编码 formatted_title = f"**{title}**" encoded_caption = quote(f"{formatted_title}\n\n{res}") telegram_msg = requests.get( f'https://api.telegram.org/<botname>:<botAPI>/sendPhoto', params={ 'chat_id': '<chatID>', 'parseMode': 'MarkdownV2', 'photo': link, 'caption': encoded_caption } )
方式二:使用POST请求(更推荐,参数无需手动编码)
Telegram API更推荐用POST请求发送消息,尤其是参数包含特殊字符时,requests会自动帮你处理编码:
import requests payload = { 'chat_id': '<chatID>', 'parse_mode': 'MarkdownV2', 'photo': link, 'caption': f"**{title}**\n\n{res}" } telegram_msg = requests.post( 'https://api.telegram.org/<botname>:<botAPI>/sendPhoto', data=payload )
3. 额外注意事项:处理特殊字符
如果你的title里包含MarkdownV2的保留字符(比如*、_、[、]、(、)、~、```、>、#、+、-、=、|、{、}、.、!),需要对这些字符进行转义(在前面加\)。你可以写一个简单的转义函数:
def escape_markdown_v2(text): special_chars = r'_*[]()~`>#+-=|{}.!' for char in special_chars: text = text.replace(char, f'\\{char}') return text # 使用时 escaped_title = escape_markdown_v2(title) caption = f"**{escaped_title}**\n\n{res}"
这样处理后,无论title里有什么特殊字符,都能正确被Telegram解析为加粗格式了。
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

