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

Python使用curses库显示日文时左侧偏移问题求助

解决Windows Terminal下Python curses日文左对齐偏移/字符缺失问题

核心原因

Windows平台的windows-curses对宽字符(日文全角字符)默认支持不完善,再加上终端编码、curses本地化设置未正确配置,导致字符宽度计算错误,最终出现偏移和缺失现象。

分步解决方案

1. 配置PowerShell 7编码

在PowerShell中执行以下命令,确保终端输出使用UTF-8:

$OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

想要永久生效的话,把这两行添加到PowerShell配置文件里(运行notepad $PROFILE打开编辑即可)。

2. 修改curses代码,启用宽字符支持

在代码开头添加本地化设置,让curses正确识别全角字符宽度:

import curses
import locale

# 关键:设置系统本地化,开启宽字符支持
locale.setlocale(locale.LC_ALL, '')
curses.setupterm()

def main(stdscr):
    # 隐藏光标(可选操作)
    curses.curs_set(0)
    # 使用默认终端颜色,避免颜色配置干扰
    curses.use_default_colors()

    # 替换成你的日文文本列表
    japanese_lines = [
        "第一行:こんにちは",
        "第二行:Python cursesの表示問題",
        "第三行:左寄せで正しく表示したい",
        "第四行:文字欠けの問題も修正したい"
    ]

    # 逐行输出,从左侧(0列)开始
    for y, line in enumerate(japanese_lines):
        stdscr.addstr(y, 0, line)

    stdscr.refresh()
    stdscr.getch()

if __name__ == "__main__":
    curses.wrapper(main)

3. 验证Windows Terminal设置

打开Windows Terminal设置 → 选择PowerShell 7配置文件 → 确认"编码"选项设置为UTF-8。

关键说明

  • locale.setlocale(locale.LC_ALL, '')会让curses读取系统本地化配置,正确处理全角字符的宽度(每个全角字符占2列)。
  • 避免用addch方法输出全角字符,改用addstr,因为addch仅支持单字节字符。
  • 如果程序包含窗口大小调整逻辑,需要在resize时重新刷新输出,确保坐标计算正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:42:52