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

为何Python的Rich库在PowerShell 7中显示乱码字符?

Rich库在PowerShell 7中表格字符乱码问题排查

问题现象

在PowerShell 7(x64)中使用Rich库打印表格时,边框字符出现乱码,示例输出如下:

ÔöÅÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔö│ÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöô
Ôöâ Character Ôöâ Binary    Ôöâ
ÔöíÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔòçÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔöüÔö®
Ôöé A         Ôöé 0b1000001 Ôöé
Ôöé B         Ôöé 0b1000010 Ôöé
Ôöé C         Ôöé 0b1000011 Ôöé
Ôöé D         Ôöé 0b1000100 Ôöé
Ôöé E         Ôöé 0b1000101 Ôöé
ÔööÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔö┤ÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÇÔöÿ

复现代码:

from rich.console import Console
from rich.table import Table


def make_table(n: int):
    table = Table("Character", "Binary")
    start_ord = ord("A")
    for o in range(start_ord, start_ord + n):
        table.add_row(chr(o), bin(o))
    return table


if __name__ == "__main__":
    console = Console()
    table = make_table(n=5)
    console.print(table)

已知背景:未修改Python或Rich版本,旧版本也出现相同问题;测试[char]0x3a9可正常输出Ω,排除基础Unicode显示故障。

原因分析与排查方向

1. 控制台代码页不匹配

Rich默认以UTF-8编码输出,但PowerShell可能未切换至UTF-8代码页,导致UTF-8字符被错误解码为GBK/Windows-1252等编码,出现乱码。

  • 排查:执行chcp查看当前代码页,若显示936(GBK)或1252则需调整。
  • 临时修复:
    chcp 65001
    
  • 永久修复:在PowerShell配置文件$PROFILE中添加chcp 65001命令,或通过注册表设置默认代码页。

2. 控制台字体不支持框线字符

Rich表格使用Unicode框线字符集,若当前控制台字体(如默认Consolas)不支持这类字符,会显示为乱码。

  • 排查步骤:
    1. 打开PowerShell属性,查看当前字体。
    2. 切换至支持完整Unicode的字体,比如Segoe UI Symbol、Cascadia Code或Noto Sans Mono。
    3. 重启PowerShell后测试输出。

3. Rich终端检测逻辑异常

Rich会自动检测终端类型,若检测错误可能输出不兼容的字符集。

  • 强制指定终端类型:
    # 强制使用Windows终端适配
    console = Console(force_terminal=True, terminal="windows")
    # 或改用简单框线风格
    table = Table("Character", "Binary", box="simple")
    

4. PowerShell输出编码配置错误

PowerShell的OutputEncoding或ConsoleOutputEncoding设置可能与Rich的UTF-8输出不匹配。

  • 排查:执行以下命令查看编码:
    [Console]::OutputEncoding
    [Console]::InputEncoding
    
  • 修复:若编码非UTF-8,执行:
    [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
    [Console]::InputEncoding = [System.Text.UTF8Encoding]::new()
    
    可将此命令添加到$PROFILE中永久生效。

5. Windows Terminal兼容性问题

若使用Windows Terminal,需确认其编码设置为UTF-8:

  • 打开Windows Terminal设置,找到PowerShell配置文件,将"编码"选项设为UTF-8。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:25:53