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

Telegram aiogram发送PrettyTable表格错位,如何用等宽字体修复?

问题解决:PrettyTable在Telegram机器人中显示错位的修复

为什么会错位?

普通文本使用的是比例字体,不同字符的宽度不一样(比如小写"i"比"w"窄很多)。而PrettyTable生成的字符串是按「每个字符宽度相同」的逻辑排版的,用比例字体显示时,原本对齐的列就会错开。

等宽字体(monospaced font)的每个字符占据的宽度完全一致,能完美还原PrettyTable的排版结构,这就是它能解决错位问题的核心原理。

具体解决方法

在Telegram中,只要把表格内容用「预格式化/代码块」的方式发送,就会自动使用等宽字体渲染。结合aiogram框架,有两种常用实现方式:

方式1:使用Markdown代码块

把PrettyTable转换后的字符串用三个反引号包裹,发送时指定parse_mode="MarkdownV2":

# 生成带代码块格式的表格字符串
table_msg = f"```\n{str(table)}\n```"
summary_msg = f"```\n{str(summary)}\n```"

# 发送消息
await message.answer(table_msg, parse_mode="MarkdownV2")
await message.answer(summary_msg, parse_mode="MarkdownV2", disable_notification=True)

注意:如果表格内容包含Markdown特殊字符(如*、_、[等),需要先对这些字符进行转义,否则会导致格式解析错误。

方式2:使用HTML预格式化标签

用<pre>标签包裹表格字符串,发送时指定parse_mode="HTML",这种方式不需要处理特殊字符转义,更省心:

# 生成带预格式化标签的表格字符串
table_msg = f"<pre>{str(table)}</pre>"
summary_msg = f"<pre>{str(summary)}</pre>"

# 发送消息
await message.answer(table_msg, parse_mode="HTML")
await message.answer(summary_msg, parse_mode="HTML", disable_notification=True)

效果说明

两种方式都会让Telegram用等宽字体渲染表格内容,PrettyTable原本对齐的列会完美展示,不会再出现错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 09:45:12