VScode终端和外部终端中文乱码问题

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格式,方便外部终端调用

扫描二维码关注公众号,回复: 17557410 查看本文章
{
    
    
    "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查看到相应的结果。

重点是都不会出现中文乱码行为