VSCode控制台乱码

乱码原因

乱码本质就是编码集合不一样,代码中一般会使用UTF-8,而操作系统的控制台 (cmd 或者 powershell)使用的是GBK。

集成开发环境编码集:

image

控制台开发环境编码集:

可使用 chcp 命令查看控制台代码页查看控制台的活动代码页

image

用GBK的编码集去解释UTF-8的字符就会出现乱码的问题

根本原因

  网上有很多教程,关于如何解决乱码问题,但是很多都缺少解释,没有说清楚设置的原因。有时候会出现设置了不生效,或者vscode中输出中文正常,但是在操作系统中拉起的控制台乱码的情况。那么原因是什么呢?首先要先了解下面的这三个特点:

  1、Windows 系统存在两个核心控制台程序:一是传统原始的 CMD(命令提示符),二是功能更完善的 PowerShell。二者的编码配置、运行环境完全独立,修改其中一个的编码规则,不会对另一个产生任何影响。

  2、VS Code 的终端并非独立控制台,而是可由用户手动配置调用对象 —— 在 VS Code 终端设置中,能自由选择调用系统的 CMD 或 PowerShell,其编码环境完全跟随所调用的控制台。

  3、双击 EXE 可执行程序弹出的控制台,与通过 Win+R 输入 cmd 打开的控制台环境不同。前者是无任何额外参数的 “纯净默认 CMD”,不会继承用户对 CMD 的自定义配置;后者则会加载用户此前修改的编码、环境变量等设置。

  如果没有考虑上面的三个点,那么直接按照网上的教程修改,可能会出现下面的几种情况:

  1、 VS Code 输出仍乱码,且通过 CMD 和 PowerShell 分别运行 EXE 时,结果不一致 —— 可能 CMD 正常、PowerShell 乱码,也可能相反。
  原因:修改的控制台,与 VS Code 实际调用的控制台不匹配。比如修改了 PowerShell 编码,但 VS Code 终端配置的是 CMD,自然无法解决 VS Code 内的乱码问题。

  2、修改后 VS Code 输出不再乱码,但直接用 CMD 或 PowerShell 运行 EXE 时,其中一个会乱码。
  原因:仅修改了 VS Code 所调用的那个控制台编码,未同步修改另一个控制台的编码。比如 VS Code 调用的 CMD 已改为 UTF-8,但系统原生 PowerShell 仍为默认编码,直接用 PowerShell 运行就会乱码。

  3、修改后 VS Code 输出正常,CMD 和 PowerShell 运行 EXE 也无乱码,但双击 EXE 弹出的控制台依旧乱码。
  原因:双击 EXE 触发的是 “纯净默认 CMD”,该环境不会继承用户对 CMD 的自定义配置。即便通过注册表等方式修改了 Win+R 打开的 CMD 编码,双击 EXE 拉起的 CMD 仍会使用系统原始默认编码,最终导致乱码。

解决方案

  按照上面的解释,可以分为四个层次:临时设置、工程项目级设置、控制台级设置、系统级设置(不推荐)。

方案1:临时设置(推荐)

  在代码的main函数刚启动的时候,添加如下代码,则会自动将控制台设置为utf-8的代码页。

system("chcp 65001 > nul");

优点:修改方便,无需修改系统,并且双击exe文件也可以使用

缺点:对代码有入侵,并且受语言限制

 

方案2:项目级设置

  通过配置 .vscode/settings.json 文件,将 chcp 65001作为启动参数传递给控制台,这样就可以做到项目级别的设置,代码如下:

{
    "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell",
            "args": [
                "-NoExit",
                "chcp 65001"
            ]
        },
        "Command Prompt": {
            "path": [
                "${env:windir}\\System32\\cmd.exe"
            ],
            "args": [
                "/k",
                "chcp 65001"
            ],
            "icon": "terminal-cmd"
        }
    },
    "terminal.integrated.defaultProfile.windows": "PowerShell", // 用来配置使用的终端
}

优点:修改不算麻烦,并且不受语言限制

缺点:仅解决vscode内置控制台乱码,使用cmd/powershell运行编译好的exe文件,或者双击exe文件执行仍乱码

 

 

方案3:控制台设置

  这个方案会比较麻烦,需要修改注册表以及给powershell提供策略,但是兼容性还算可以。并且不需要配置vscode,以后的所有的vscode工程项目都适用

powershell设置

  原理是通过配置文件,自动执行切换的动作

  1. 以管理员身份打开powershell (win + R 输入 powershell ,按住 ctrl + shift + 回车)
  2. 输入 New-Item $PROFILE -ItemType File -Force 创建配置文件
  3. 输入 notepad $PROFILE 编辑刚刚创建的配置文件
  4. 在弹出的文本框中粘贴下面的代码并保存
    $OutputEncoding = [Console]::InputEncoding = [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding
    chcp 65001 | Out-Null
  5. 输入 Set-ExecutionPolicy RemoteSigned 修改执行策略,放开权限
  6. 重新打开powershell 使用chcp验证是否为 65001

cmd设置

  原理是通过注册表,在运行前自动执行chcp 65001 的动作

  1. 打开注册表 (win + R 输入 Regedit)
  2. 导航到路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
  3. 在右侧窗格右键,选择"新建"→"字符串值",命名为 AutoRun
  4. 双击 AutoRun,将数值数据设置为 chcp 65001 > nul
  5. 关闭注册表编辑器,重启 cmd 控制台即可生效

优点:不需要在vscode中配置,vscode中不管使用cmd还是powershell都正常,外部通过cmd/powershell执行exe也正常

缺点:双击exe运行程序弹出的代码会乱码

 

方案4:直接修改电脑的编码集(不推荐)

  通过这种方式,兼容性很差,会导致很多软件乱码,不推荐使用,这里只是提供一种思路

image

优点:彻底解决乱码问题

缺点:会干扰很多中文软件,导致乱码,也许重新安装可以解决,也可能无法解决

posted @ 2025-12-31 16:09  XBGzZ  阅读(493)  评论(0)    收藏  举报