赞
踩
本篇技术博客旨在解决VScode运行代码过程中终端输出中文乱码的问题。
博主最近在复习C语言的过程中,使用VScode作为自己的编辑器,但是VScode有个问题,他在输出中文的时候会输出乱码,笔者对于UTF-8/GBK之类的编码知识略有学习,所以一开始以为自己是代码的编码方式选错了,于是在UTF-8与GBK两种编码中间横跳,发现无论是选择UTF-8还是GBK都无法解决中文乱码的问题。
在经过了漫长的查找资料和尝试以后,博主发现了中文乱码背后的原因,由于VScode本身是一个编辑器,所以其本身是不具备代码运行的能力的,我们需要下载GUN集成开发环境,博主选择的是Mingw+VScode下C/C++插件这样的一个组合。
下面是中文乱码的原因解释:
知道了原因以后,我们有两种思路去解决这个问题:
1.将CMD转化为UTF-8编码。
2.将Mingw由UTF-8编码经过转码为GBK编码交给cmd,
下面我分别对两种方案进行尝试:
· 查看我们cmd的编码环境 : (打开cmd并且输入命令chcp)
所以我们只需要修改这里的code page的值就可以了。(修改以前一般是936)
我们输入命令:
chcp 65001
即可以将cmd从GBK/GB2312转化为UTF-8编码。
关于代码页的详细了解:
这个时候再编译代码即可看到中文:
但是这种解决方案他只能临时解决问题,一旦cmd关闭,系统自动重置chcp的值,则中文输出重新会变为乱码:
当然通过修改注册表的数值是可以达到永久修改chcp的值的:
具体操作如上图:打开注册表编辑器,然后再在这个目录下新建一个字符串,并且将其赋值为chcp 65001。
==============================================
这里应该是写到powershell下面,或者将vscode 的terminal端切换到cmd,具体可以看:如何在powershell中修改编码默认值
我们可以修改mingw的输出,让它在编译时使用GBK编码输出,然后再让CMD去显示:(这里我们需要修改Vscode
的配置文件==>.json文件)
(.json的知识不在这里讲解)
将task.json修改为
// 用来编译 { // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [{ "label": "Build", // 任务的名字叫Build(编译),注意是大小写区分的,等会在launch中调用这个名字 "type": "shell", // 任务执行的是shell命令 "command": "g++", // 命令是g++ "args": [ //参数 "-g", // 调试 // "-fexec-charset=GBK", // 处理mingw中文编码问题 "-finput-charset=UTF-8",// 处理mingw中文编码问题 // "${file}", //当前文件路径,包括所在目录绝对路径和文件名 "-o", //对象名,不进行编译优化 "${fileDirname}/exes/${fileBasenameNoExtension}.exe", //当前目录下exes文件夹下的exe文件,exe文件名为 当前文件名(去掉扩展名).exe ], // 所以以上部分,就是在shell中执行下面这行语句(以我E盘中一个main.cpp为例) // g++ -g -fexec-charset=GBK -finput-charset=UTF-8 e:\Study\Programming\Code\Algo\PTABasicLevelCPP\main.cpp -o e:\Study\Programming\Code\Algo\PTABasicLevelCPP/exes/main.exe "group": { "kind": "build", "isDefault": true // 任务分组,tasks是个数组,意味着可以执行多个task // 在build组的任务们,可以通过在Command Palette(F1) 输入run build task来运行 // 当然,如果任务分组是test,你就可以用run test task来运行 }, "problemMatcher": [ "$gcc" // 使用gcc捕获错误 ], }] }
将launch.json修改为:
{ "version": "0.2.0", "configurations": [ { "name": "C++ Launch (GDB)", // 调试时程序员看到的名字 "preLaunchTask": "Build", // launch之前会运行的任务,这个名字一定要跟tasks.json中的任务名一致 "type": "cppdbg", // 经测试,不可删除 "request": "launch", // 经测试,不可删除 "program": "${fileDirname}/exes/${fileBasenameNoExtension}.exe", //运行当前打开文件的目录下exes文件夹中名字和当前文件相同,但扩展名为exe的程序 "args": [], // 运行程序是默认是没有参数的 "stopAtEntry": false, // 选为true则会在打开控制台后停滞,暂时不执行程序 "cwd": "${workspaceFolder}",// 当前工作路径:当前文件所在的工作空间 "environment": [], "externalConsole": true, // 是否使用外部控制台, "MIMode": "gdb", "miDebuggerPath": "D:\\WorkingSoftware\\MinGW\\bin\\gdb.exe", //调试器路径 "setupCommands": [{ "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true }] }] } // https://code.visualstudio.com/Docs/editor/debugging#_launch-configurations // author: huihut // Available variables which can be used inside of strings. // ${workspaceRoot}: the root folder of the team // ${file}: the current opened file // ${fileBasename}: the current opened file's basename // ${fileDirname}: the current opened file's dirname // ${fileExtname}: the current opened file's extension // ${cwd}: the current working directory of the spawned process
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。