VScode终端和外部终端中文乱码问题
- 前言
- VScode终端
- VScode的第二大特点
- 方法一
- 方法二
- 外部终端(命令为ctrl+f5)
- 总结
- 实现VScode终端和外部终端都能运行可执行文件
- 心得
前言
如果只想要看解决方案可直接跳转到总结部分,其余的章节只是用来说明原理和分步解释
VScode终端
VScode的终端默认编码是UTF-8,当你编写好task.json ,开始cmake你的所有文件时候,要保证带有中文的文件是UTF-8的,要不然在终端执行的时候,会链接出错,不能够识别。
VScode的第二大特点
生成的文件编码格式都是GBK格式,对此生成的可执行文件,如果想要在VScode的终端执行,并且保证中文不乱码有两个方法
方法一
短暂修改当前终端活动页的编码格式为GBK,这样做的前提是,你已经在VScode里面编译生成好了一个可执行文件,操作和对比如下图:
这里可以看出我的文件目录,下面已经生成了一个可执行文件main.exe,之后我们正常使用task.json,进行整个可执行文件的编译,发现中文没有输出(此时的终端活动页码是UTF-8),而可执行文件编码格式是GBK,
对此我们需要将终端的活动页面改为GBK
这个时候进入我们的可执行文件,即可观察到正常运行
方法二
在进行代码编辑的时候直接告诉我的VScode终端,使用GBK方式对我的代码进行cmake重装编译,那么就可以看到新的可执行文件运行过程
结果图如下
外部终端(命令为ctrl+f5)
当在VScode启用外部终端的时候,默认编码是GBK,所以我们得需要配置task.json,使得生成的可执行文件是GBK编码的,这样调用gbd调试可执行文件的时候,才能完整的被外部终端调用
结果如下,ctrl+f5
总结
外部终端是为了解决VScode终端不能使用system(“cls”)进行操作清屏程序输出的问题。
实现VScode终端和外部终端都能运行可执行文件
第一步:
设置设置编码格式为UTF-8,使得中文编译能够被VScode终端cmake通过
第二步:
设置代码终端编译风格为GBK
第三步:
配置task.json文件,使得输出的可执行文件为GBK格式,方便外部终端调用
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\Microsoftdownload\\MSys2\\MSys2\\ucrt64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${fileDirname}\\*.cpp",
"-I",
"${fileDirname}\\include",
"-o",
"${fileDirname}\\out\\${fileBasenameNoExtension}.exe",
"-fexec-charset=GBK"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器: D:\\Microsoftdownload\\MSys2\\MSys2\\ucrt64\\bin\\g++.exe"
}
]
}
它的配置按照你正常能编译通过的格式就行,重点在于这一步,生成的可执行文件编码格式
第四步:
配置launch.json文件使得允许外部终端调用可执行文件
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\out\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [
],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "D:\\Microsoftdownload\\MSys2\\MSys2\\ucrt64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
},
]
}
]
}
同理正常编译即可,重点在这个命令给他打开就行
心得
最后打工告成,我们就得到了既能外部终端查看可执行文件结果(使得我们的system(“cls”)成功运行),也能在VScode查看到相应的结果。
重点是都不会出现中文乱码行为