VSCode怎么配置launch.json解决终端乱码

梦浩小哥_1722

梦浩小哥_1722

2026-10-12

897人浏览

原创

必须在 launch.json 的 configuration 内部添加 "env": {"pythonioencoding": "utf8"} 才能使 debug console 正确显示中文,因 debug console 不读 terminal.integrated.env.windows 或 settings.json,且 windows 下仅识别小写 utf8;console 字段需设为 integratedterminal 或 externalterminal,不可用 internalconsole 或缺失;output 面板走独立通道,不受 launch.json 影响,需系统级启用 utf-8 支持方可根治。

vscode怎么配置launch.json解决终端乱码

launch.json 里加 env 字段才能影响 Debug Console

Debug Console 不走集成终端那一套,也不读 terminal.integrated.env.windows,它由调试器进程直连 Node.js 层渲染,Windows 上默认完全无视 UTF-8。所以即使你在 settings.json 里配好了 PYTHONIOENCODING,Debug Console 里 print("中文") 还是显示 ? 或空格——这不是配置漏了,是根本没走同一条链路。

必须在项目根目录的 .vscode/launch.json 中,给当前 launch 配置显式加 env:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Current File",
      "type": "python",
      "request": "launch",
      "module": "pytest",
      "console": "integratedTerminal",
      "env": {
        "PYTHONIOENCODING": "utf8"
      },
      "justMyCode": true
    }
  ]
}
  • env 必须写在具体 configuration 对象内部,不能放在外层或 configurations 数组外面
  • 值必须是小写 utf8,不是 UTF-8、utf-8 或 UTF8,Windows 下只有这个拼写被识别
  • 如果用了 Code Runner 插件跑调试,它不读 launch.json,得单独改它的执行命令,比如:"code-runner.executorMap": {"python": "chcp 65001 && python -u"}

console 字段选错会导致 env 完全不生效

如果你把 "console": "externalTerminal" 或 "console": "integratedTerminal" 写对了,env 才会传给 Python 进程;但若设成 "console": "internalConsole"(已弃用),或者压根没写 console 字段,VSCode 会 fallback 到旧版调试控制台,此时 env 被忽略,乱码照旧。

常见组合与效果:

  • "console": "integratedTerminal":走集成终端,env 生效,且能复用你配好的 terminal.integrated.profiles.windows
  • "console": "externalTerminal":弹出独立 CMD/PowerShell 窗口,env 也生效,但窗口自身代码页仍需额外处理(比如靠 chcp 65001 启动)
  • "console": "none" 或缺失该字段:回退到 internalConsole,env 失效,Debug Console 乱码无法缓解

launch.json 配置后仍乱码?优先检查 Python 版本和调试器

某些老版本 ptvsd(python-debugger 扩展依赖的底层)或自定义 debug adapter 会绕过 env 注入逻辑,尤其在 Windows 上。这时候 print() 输出乱码,同时 Debug Console 里还可能伴随一行警告日志:Warning: Failed to set encoding on stdout/stderr。

js2java
js2java

JavaScript 到 Java 全栈翻译助手,专为前端开发者学习 Java 或快速实现后端业务逻辑而设计。当用户提到以下场景时必须使用此技能: - "帮我把这段 JS 代码转成 Java" - "用 Java 怎么写这个逻辑" - "我习惯用 JS 写,想翻译成 Java" - "教我 Java,我要写后端接...

下载

验证方式:

  • 在 Debug Console 输入 import sys; sys.stdout.encoding,如果返回 'cp936',说明 PYTHONIOENCODING 没生效
  • 升级 Python 到 3.8+,并确保使用官方 ms-python.python 扩展(非第三方 debug adapter)
  • 如果用的是 C/C++ 项目,launch.json 中的 type 是 cppvsdbg 或 gdb,那 env 字段要写在对应配置下,且只影响程序启动环境,不影响调试器自身输出

别忘了 Output 面板也是独立通道

Output 面板(比如 Python Test Log、CMake Tools 输出)不读 launch.json,也不继承 terminal.* 设置,它由 VSCode 主进程直接捕获子进程 stdout/stderr 字节流,底层依赖 Node.js 的编码感知能力。Windows 上 Node 默认禁用 UTF-8 模式,所以即使 launch.json 和终端都配对了,Output 面板里仍可能出现问号。

目前无通用配置项可修复,临时方案只有两个:

  • 在对应扩展的文档里查是否支持自定义 env(如 CMake Tools 提供 cmake.environment 设置)
  • 彻底统一系统级编码:启用 Windows “Beta: Use Unicode UTF-8 for worldwide language support”,重启系统——这是唯一能让 Output 面板、终端、Debug Console 全部对齐的根治法,但会影响部分老旧 Win32 应用

真正容易被忽略的点是:launch.json 只管调试启动那一刻的环境变量,它不接管后续所有子进程的编码行为;而 Output 面板甚至不经过调试器进程,直接从主进程 fork 出来捕获输出——这两条路径,从来就不是一回事。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

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

相关专题

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

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

2023.06.20

4156

8

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

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

2023.07.28

1295

5

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

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

2023.08.03

1678

5

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

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

2023.08.17

9703

11

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

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

2023.09.01

940

4

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

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

2023.09.04

2524

5

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

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

2023.09.14

1509

5

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

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

2023.09.21

4349

3

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

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

2023.09.25

2475

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程