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

Python3生成Unicode字符表格时格式错乱,求修复方法

修复Unicode字符表格的对齐问题
  • 问题本质:你代码里用固定的<22s格式化Unicode字符,但不同Unicode字符的显示宽度不一致——ASCII字符占1列,东亚文字、全角符号等占2列,而str.format()的宽度参数是按字符个数计算,不是显示宽度,导致列错位。

修复方案一:使用专业库计算显示宽度(推荐)

wcwidth是专门用于计算终端字符显示宽度的库,能准确处理所有Unicode字符:

  1. 安装库:
pip install wcwidth
  1. 修改后的代码:
from wcwidth import wcswidth

equal = " = "
n = 5
char_target_width = 22  # 字符部分的目标显示宽度

for i in range(int(1000/n), int(6000/n)):
    for j in range(n):
        code = n * i + j + 1
        char = chr(code)
        # 获取字符的实际显示宽度,无法识别时默认按1处理
        char_width = wcswidth(char) if wcswidth(char) != -1 else 1
        # 计算需要补充的空格数
        padding = char_target_width - char_width
        # 格式化输出,保证每列总显示宽度一致
        print(f'{code:<5d}{equal}{char}{" " * padding}', end="")
    print()

修复方案二:手动判断宽字符(无库依赖)

如果无法安装第三方库,可以通过字符范围粗略判断宽字符,适合临时场景:

equal = " = "
n = 5
char_target_width = 22

def get_display_width(char):
    # 覆盖中文、日文、韩文等常见宽字符范围
    if '\u4e00' <= char <= '\u9fff' or '\u3040' <= char <= '\u30ff' or '\uac00' <= char <= '\ud7af':
        return 2
    return 1

for i in range(int(1000/n), int(6000/n)):
    for j in range(n):
        code = n * i + j + 1
        char = chr(code)
        char_width = get_display_width(char)
        padding = char_target_width - char_width
        print(f'{code:<5d}{equal}{char}{" " * padding}', end="")
    print()

说明:方案一能处理emoji、组合字符等复杂Unicode场景,是最可靠的;方案二仅覆盖常见宽字符,适合快速临时修复。

内容的提问来源于stack exchange,提问作者yohan T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:30:44