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

控制台开发环境编码集:
可使用 chcp 命令查看控制台代码页查看控制台的活动代码页

用GBK的编码集去解释UTF-8的字符就会出现乱码的问题
踩坑过程
网上有很多教程,关于如何解决乱码问题,但是很多都缺少解释,没有说清楚设置的原因。有时候会出现设置了不生效,或者vscode中输出中文正常,但是
在操作系统中拉起的控制台乱码的情况。那么原因是什么呢?
首先windows系统上的控制台有两个,一个是比较原始的cmd,另一个是比较新且功能更强大的 powershell。另外就是vscode中可以自己选择使用 cmd 还是 powershell。
很多教程没有说清楚这一点,就导致了可能vscode默认使用 cmd 控制台,但是我们只配置了 powershell ,或者是vscode拉起 powershell 但是拉起的是 cmd 。甚至有时候
在vscode中输出是正常,但是在操作系统中直接启动的控制台却是乱码。
如何解决
按照上面的解释,可以分为四个层次:临时设置、工程项目级设置、控制台级设置、系统级设置(不推荐)。
方案1:临时设置
输入chcp 65001 可以将当前的会话设置为 UTF-8。但是如果会话关闭,那么将会失效。可以临时使用,影响最小,但是及其不方便。
方案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", // 用来配置使用的终端
}
这种方案也有缺点和优点,缺点就是每次新增一个项目都需要把配置拷贝一份,优点是不会干扰到其他程序
方案3:控制台设置
这个方案会比较麻烦,需要修改注册表以及给powershell提供策略,但是兼容性还算可以。并且不需要配置vscode,以后的所有
vscode工程项目都适用
powershell设置
原理是通过配置文件,自动执行切换的动作
- 以管理员身份打开powershell (win + R 输入 powershell ,按住 ctrl + shift + 回车)
- 输入 New-Item $PROFILE -ItemType File -Force 创建配置文件
- 输入 notepad $PROFILE 编辑刚刚创建的配置文件
- 在弹出的文本框中粘贴下面的代码并保存
$OutputEncoding = [Console]::InputEncoding = [Console]::OutputEncoding = New-Object System.Text.UTF8Encoding chcp 65001 | Out-Null - 输入 Set-ExecutionPolicy RemoteSigned 修改执行策略,放开权限
- 重新打开powershell 使用chcp验证是否为 65001
cmd设置
原理是通过注册表,在运行前自动执行chcp 65001 的动作
- 打开注册表 (win + R 输入 Regedit)
- 导航到路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
- 在右侧窗格右键,选择"新建"→"字符串值",命名为 AutoRun
- 双击 AutoRun,将数值数据设置为 chcp 65001 > nul
- 关闭注册表编辑器,重启 cmd 控制台即可生效
方案4:直接修改电脑的编码集(不推荐)
通过这种方式,兼容性很差,会导致很多软件乱码,不推荐使用,这里只是提供一种思路


浙公网安备 33010602011771号