NodeJS中process.stdout.moveCursor与宽字符的光标错位问题
解决方案:使用终端转义序列按逻辑字符移动光标
process.stdout.moveCursor() 按列宽单位移动光标,而东亚宽字符(中文、日文、全角字符等)占2列,直接使用会导致光标落在字符中间。要实现像按左右箭头那样按完整逻辑字符移动,可直接向终端发送ANSI转义序列,终端会自动处理字符宽度差异。
核心转义序列
- 向左移动N个字符:
\x1b[${N}D - 向右移动N个字符:
\x1b[${N}C
示例代码
替换手动计算偏移的逻辑,直接用转义序列实现需求:
process.stdout.write("Test data! 測試資料123テスト"); // 向左移动5个完整字符(自动适配半角/全角宽度) process.stdout.write("\x1b[5D");
兼容性说明
你使用的Windows 10/11命令提示符、Ubuntu及WSL终端均原生支持这类标准ANSI转义序列,无需额外配置。相比手动跟踪字符宽度计算偏移,该方法更可靠且无需维护字符宽度判断逻辑。
内容的提问来源于stack exchange,提问作者SyndRain
相关产品推荐
相关产品推荐

