VSCode怎么解决Nodejs运行打印中文乱码

雨墨大大_1887

雨墨大大_1887

2026-09-29

212人浏览

原创

根本原因是node.js启动时默认沿用windows控制台代码页(如936),将utf-8字节流误按gbk解码;需配置terminal.integrated.profiles.windows执行chcp 65001,并在terminal.integrated.env.windows中设"node_options": "--experimental-encoding"(node≥18.17.0)及"pythonioencoding": "utf8",重启vscode生效。

vscode怎么解决nodejs运行打印中文乱码

Node.js 进程 stdout 输出中文变方块或问号

根本原因是 Node.js 启动时默认沿用 Windows 控制台代码页(如 936),把 UTF-8 编码的 JS 字符串(内部为 UTF-16)错误地按 GBK 解码输出。这不是 VSCode 显示问题,而是进程级编码错配。

验证方式:在 VSCode 终端运行 node -e "console.log(process.stdout.encoding)",若返回 undefined 或 cp936,就坐实了。

  • 必须让每个新终端启动即切 UTF-8:在 settings.json 中配置 "terminal.integrated.profiles.windows",确保 PowerShell 启动命令包含 chcp 65001 >nul
  • 仅靠 chcp 65001 不够——它只改终端显示层,Node 进程仍可能 fallback 到旧代码页;需配合环境变量强制生效
  • 在 settings.json 中添加:
    "terminal.integrated.env.windows": {
      "NODE_OPTIONS": "--experimental-encoding",
      "PYTHONIOENCODING": "utf8"
    }
    注意:--experimental-encoding 仅在 Node.js ≥18.17.0 有效;低于该版本请升级或改用全局系统环境变量
  • 不要依赖 files.encoding:它只控制编辑器读文件,对 console.log 输出完全无效

Debug Console 和 Output 面板里中文仍是 或空格

这是最隐蔽的一类乱码:Debug Console 和 Output 面板不经过终端进程,而是走 VSCode 内部的 Node.js IPC 通道,chcp 和终端环境变量对其无效。

Aria2 Json Rpc
Aria2 Json Rpc

通过 JSON‑RPC 2.0 与 aria2 下载管理器交互,使用自然语言命令管理下载、查询状态并控制任务。适用于 aria2、下载管理或种子操作。

下载

核心解法是让 Extension Host(插件宿主进程)本身以 UTF-8 模式启动,因为它基于 Node.js。

  • 确认你开发或使用的插件是否调用了 process.stdout.setEncoding('utf8') —— 若是你自己写的插件,这是最直接可控的修复点
  • VSCode 自身未暴露 IPC 层编码配置项,所以必须从源头干预:确保全局 NODE_OPTIONS 已设为 --experimental-encoding,并重启 VSCode(不是重载窗口)
  • "files.encoding": "utf8" 对 Output 面板日志完全无效;chcp 65001 也无效——别在这两个地方浪费时间
  • 如果用的是旧版 Node(process.stdout.write(Buffer.from("你好", "utf8")) 绕过默认编码逻辑,但仅限调试

npm scripts 输出中文变成 “浣犲ソ” 或

npm run dev 类脚本输出乱码,本质是 npm 启动的子 Node 进程继承了父终端的代码页,而非你的文件编码。即使编辑器里中文注释显示正常,脚本输出仍会崩。

  • 必须在 settings.json 中统一设置环境变量:
    "terminal.integrated.env.windows": {
      "NODE_OPTIONS": "--no-warnings --experimental-encoding",
      "NPM_CONFIG_LOGLEVEL": "warn",
      "PYTHONIOENCODING": "utf8"
    }
  • 避免在 package.json 的 scripts 里硬写 chcp 65001 && node index.js:跨平台不兼容,且无法修复 Debug Console 乱码
  • 使用 cross-env 是冗余的——VSCode 终端已能通过 env.windows 精准注入,无需额外依赖
  • PowerShell 5.1 用户注意:$OutputEncoding = [System.Text.UTF8Encoding]::new() 对 Node 子进程无穿透力,删掉这类 PowerShell 层设置

终端字体不支持中文,再对的编码也白搭

即使 chcp 65001 生效、NODE_OPTIONS 正确、文件保存为 UTF-8,若终端字体本身不含中文字形(如默认 Consolas),照样显示方块。

  • 打开 settings.json,显式设置 "terminal.integrated.fontFamily",例如:
    "terminal.integrated.fontFamily": "'Microsoft YaHei', 'SimSun', 'Consolas', 'monospace'"
    注意单引号包裹、英文逗号分隔
  • Windows 用户慎用纯 SimSun:缺少等宽变体,可能导致侧边栏或表格对齐错位;Microsoft YaHei 更稳
  • macOS 用户用 "PingFang SC" 或 "Heiti SC";Linux 用户检查是否安装 fonts-wqy-zenhei 或 noto-fonts-cjk
  • 字体设置必须写全 fallback 链——Electron 渲染引擎不会自动补全,漏掉中文字体就会 fallback 到无中文的字体,结果就是方块
真正卡住人的往往不是某一个配置,而是 Debug Console 和 Output 面板的 IPC 编码不可见、不可配,只能靠 Node 版本 + 全局 NODE_OPTIONS + 完整重启三者咬死生效。任何环节松动,都会导致“终端正常但调试日志还是乱码”这种看似矛盾的现象。

相关文章

全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

2023.06.20

3876

8

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.28

1235

5

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.03

1578

5

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

2023.08.17

9363

11

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

860

4

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

2324

5

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.14

1449

5

js截取字符串的方法介绍
js截取字符串的方法介绍

JavaScript字符串截取方法,包括substring、slice、substr、charAt和split方法。这些方法可以根据具体需求,灵活地截取字符串的不同部分。在实际开发中,根据具体情况选择合适的方法进行字符串截取,能够提高代码的效率和可读性 。

2023.09.21

3909

3

js生成随机数方法
js生成随机数方法

JavaScript生成随机数的方法,包括使用Math.random()方法生成指定范围内的随机整数、生成随机字符串和生成随机颜色。根据具体需求,可以选择适合的方法来生成随机数,以实现各种功能 。

2023.09.25

2195

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
快速入门Node.JS全套完整版
快速入门Node.JS全套完整版

共83课时 | 13.1万人学习

nodejs开发基础教程
nodejs开发基础教程

共15课时 | 4.9万人学习

JavaScript设计模式视频教程
JavaScript设计模式视频教程

共28课时 | 6.2万人学习