使用discord.py:如何修复Discord Embed的字符串宽度格式化问题?
解决Discord Embed中字符串宽度错乱的问题
问题根源在于:控制台使用等宽字体,每个字符(包括空格)宽度一致,但Discord Embed默认采用非等宽字体,普通空格的宽度远小于字母/符号,导致手动补的空格无法实现预期对齐效果。以下是两种无需代码框的修复方案:
方案一:使用Markdown表格(推荐,美观稳定)
利用Discord支持的Markdown表格特性,自动实现列对齐,无需手动处理空格。修改代码如下:
if in_database: searched_strings: list[str] = ["PLACEHOLDER_MONDAY", "PLACEHOLDER_TUESDAY", "PLACEHOLDER_WEDNESDAY", "PLACEHOLDER_THURSDAY", "PLACEHOLDER_FRIDAY", "PLACEHOLDER_SATURDAY", "PLACEHOLDER_SUNDAY"] days: list[str] = await translate_m(interaction.guild_id, searched_strings) # 构建表格结构 work_hours = "| 工作日 | 工时 |\n|--------|------|\n" for row in in_database: day_name = days[row[0] - 1] work_hours += f"| **{day_name}** | `{row[1]}` |\n" print(work_hours) translations[2] = translations[2].replace("[work_hours]", work_hours) embed: Embed = Embed(description="\n".join(translations[:-1]), color=0xEA2027) await channel.send(embed=embed)
表格会自动让两列对齐,视觉整洁且对齐效果可靠。
方案二:用全角空格替换普通空格填充
全角空格(Unicode编码\u3000)在Discord的非等宽字体中宽度统一,效果接近等宽字体的空格。修改代码中的填充逻辑:
if in_database: searched_strings: list[str] = ["PLACEHOLDER_MONDAY", "PLACEHOLDER_TUESDAY", "PLACEHOLDER_WEDNESDAY", "PLACEHOLDER_THURSDAY", "PLACEHOLDER_FRIDAY", "PLACEHOLDER_SATURDAY", "PLACEHOLDER_SUNDAY"] days: list[str] = await translate_m(interaction.guild_id, searched_strings) for row in in_database: day: str = f"- **{days[row[0] - 1]}**:" # 计算需要填充的全角空格数,替换普通空格 fill_count = 50 - len(day) if fill_count > 0: day += "\u3000" * fill_count work_hours += day + f"`{row[1]}`\n" print(work_hours) translations[2] = translations[2].replace("[work_hours]", work_hours) embed: Embed = Embed(description="\n".join(translations[:-1]), color=0xEA2027) await channel.send(embed=embed)
注意:不同语言字符的宽度可能存在差异(比如中文和英文),填充数量可能需要根据实际显示效果微调。
内容的提问来源于stack exchange,提问作者Razzer
相关产品推荐
相关产品推荐

