原因:
使用GCC对C++代码进行编译时,有两个关键参数
- 一是编译器用于读取解析源代码的编码,由-finput-charset=encoding指定
- 二是编译器用于生成可执行文件的编码,由-fexec-charset=encoding指定
其中encoding为使用的编码集,如utf-8,GBK等
-
编译器用于读取解析的编码集如果与文件保存的编码不匹配,程序可能不能够正常执行,如文件保存未utf-8但使用GBK对其进行读取
-
编译器用于生成可执行文件的编码如果与终端读取输入的编码不匹配,则可能终端出现中文乱码,如可执行文件使用utf-8但终端使用GBK
VSCode和DevC++运行代码后,终端显示中文乱码的原因为:
- cpp文件通常的默认保存格式为utf-8
- VSCode和DevC++调用的GCC默认解析编码和生成编码都为utf-8
- Windows(中国)终端默认使用的解析编码为GBK
解决中文乱码:
VSCode
当前目录下的.vscode目录下的tasks.json文件的功能指定是编译器的配置,只需要在其args项目中添加-fexec-charset=GBK
,如果想要同时规定解析编码也加入-finput-charset=UTF-8
(虽然默认就是),以下为示例tasks文件(C++):
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "gcc_path\\g++.exe", // 自己机器上GCC配置的环境变量路径下的g++
"args": [
"-fdiagnostics-color=always",
"-finput-charset=UTF-8", // 解析编码
"-fexec-charset=GBK", // 生成编码
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "gcc_path" // 自己机器上GCC配置的环境变量路径
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
DevC++
打开顶部工具栏目中的编辑器选项
设置解码方式规范为UTF-8
打开顶部工具栏中编译选项
在选择的执行模式下,编译时加入以下命令
-finput-charset=UTF-8 -fexec-charset=GBK
再次使用VSCode和DevC++运行代码,即可在终端看到正常显示的中文字符而非乱码