Telegram API如何在代码块消息中显示换行符?
我之前也碰到过这个问题,其实核心是要让Telegram的解析引擎正确识别代码块内的换行符,以下是两种经过验证的可行方案:
方案1:使用MarkdownV2解析模式(推荐)
Telegram现在推荐使用MarkdownV2而非旧版的Markdown模式,它对代码块的解析更稳定。只需要用```包裹你的代码文本,并且确保文本里的\n是原始换行符(不要转义成\\n)。
示例代码(Python + requests)
import requests bot_token = "你的机器人Token" chat_id = "目标聊天ID" # 带换行的代码内容,直接用\n或者多行字符串 code_content = "def calculate_sum(a, b):\n return a + b\n\nresult = calculate_sum(5, 3)\nprint(result)" # 用MarkdownV2代码块包裹内容 message = f"```\n{code_content}\n```" # 发送请求 requests.post( f"https://api.telegram.org/bot{bot_token}/sendMessage", data={ "chat_id": chat_id, "text": message, "parse_mode": "MarkdownV2" } )
方案2:使用HTML解析模式
如果你更习惯用HTML标签,<pre>标签会完美保留代码的换行和缩进格式。同样要注意传递原始的\n,如果代码里包含<、>、&这些HTML特殊字符,需要提前转义。
示例代码(Python + requests)
import requests bot_token = "你的机器人Token" chat_id = "目标聊天ID" code_content = "def calculate_sum(a, b):\n return a + b\n\nresult = calculate_sum(5, 3)\nprint(result)" # 转义HTML特殊字符(如果代码里有这些字符的话) code_content = code_content.replace("&", "&").replace("<", "<").replace(">", ">") # 用<pre>标签包裹 message = f"<pre>{code_content}</pre>" # 发送请求 requests.post( f"https://api.telegram.org/bot{bot_token}/sendMessage", data={ "chat_id": chat_id, "text": message, "parse_mode": "HTML" } )
常见坑点排查
- 不要转义换行符:如果你的代码里把
\n写成了\\n,Telegram会显示字面量的\n而不是换行,一定要确保传递的是实际的换行符。 - 弃用旧版Markdown:旧的
parse_mode="Markdown"存在很多解析bug,官方已经不推荐使用,换成MarkdownV2就好。 - 文本长度限制:
sendMessage接口最多支持4096字符,如果你的代码过长,建议用sendDocument发送代码文件,或者拆分消息。 - HTML特殊字符转义:用HTML模式时,代码里的
<、>、&必须转义,否则会破坏HTML结构,导致解析失败。
内容的提问来源于stack exchange,提问作者NVO
相关产品推荐
相关产品推荐

