VS Code如何设置build task触发的终端编码 解决CPP编译输出乱码
编译CPP时cl输出乱码问题解决方案
方法1:将编码切换命令嵌入构建任务配置
无需单独为构建终端触发chcp 65001,直接将编码切换命令和编译命令拼接即可:
- 若构建任务使用cmd执行命令,修改tasks.json中的命令配置为:
cmd /c "chcp 65001 >nul && cl 你的编译参数 源文件.cpp"
其中>nul用于屏蔽chcp命令本身的输出,避免干扰编译日志。 - 若构建任务使用PowerShell执行命令,修改tasks.json中的命令配置为:
powershell -Command "chcp 65001 | Out-Null; cl 你的编译参数 源文件.cpp"
如果使用CMake、Ninja等构建工具,可将上述chcp命令作为前缀加到构建调用语句前即可生效。
方法2:修改VS Code内嵌终端默认编码
可直接指定终端默认使用UTF-8编码,无需每次构建单独切换:
- 打开VS Code设置,搜索
terminal.integrated.shellArgs.windows(仅适用于Windows系统) - 若默认终端为cmd,添加配置值:
"/K chcp 65001 >nul" - 若默认终端为PowerShell,添加配置值:
["-NoExit", "-Command", "chcp 65001 | Out-Null"]
如果不想影响全局终端配置,可仅在对应C/C++项目的工作区设置中修改以上配置项。
方法3:强制cl编译器输出使用UTF-8编码
最稳定的方案是直接给cl编译器添加/utf-8编译参数,该参数会强制编译器的日志输出、源文件解析均使用UTF-8编码,无需修改终端编码即可避免乱码。
直接将/utf-8加入编译参数列表即可,示例:cl /utf-8 test.cpp /o test.exe
注意事项
/utf-8参数从Visual Studio 2015 Update 2版本开始支持,更早版本的VS编译器需要先升级版本- 若使用MinGW等其他编译器,可对应添加编码参数:
-finput-charset=UTF-8 -fexec-charset=UTF-8
内容的提问来源于stack exchange,提问作者johnsonshu
相关产品推荐
相关产品推荐

