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

{
    "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查看到相应的结果。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/803349.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决C#读取US7ASCII字符集oracle数据库的中文乱码

👨 作者简介:大家好,我是Taro,全栈领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录 前言一、解决方法二、安装System.Data.OleDb连接库三…

第7章 模块(2)

目录 7.3 插入和删除模块 7.3.1 模块的表示 7.3.2 依赖关系和引用 7.3.3 模块的二进制结构 7.3.4 插入模块 7.3.5 移除模块 本专栏文章将有70篇左右,欢迎关注,查看后续文章。 7.3 插入和删除模块 两个系统调用: init_module&#xff1…

考研数学二战,怎么准备才能提升大?

一战70多...二战提升空间那是相当的大 我身边很多一战甚至不到60,二战成绩飙到120的,真的很猛 所以你根本不用担心是自己学数学没天赋,其实知识方法没用对而已 本人属于基础很差相当于是零基础的23考研党,经过一年备考成功上岸…

k8s集群 安装配置 Prometheus+grafana+alertmanager

k8s集群 安装配置 Prometheusgrafanaalertmanager k8s环境如下:机器规划: node-exporter组件安装和配置安装node-exporter通过node-exporter采集数据显示192.168.40.180主机cpu的使用情况显示192.168.40.180主机负载使用情况 Prometheus server安装和配置…

JayChou周杰伦的歌曲网易云音乐怎么听

听Jay自由 网易云导入 专辑介绍 周杰伦(Jay Chou)是一位著名的台湾流行歌手、词曲创作人和演员。他以其独特的音乐风格和才华横溢的创作能力而闻名于世。以下是对周杰伦所有专辑的简要介绍: 《Jay》(2000年)&#xf…

独立开发者系列(26)——域名与解析

域名(英语:Domain Name),又称网域,是由一串用点分隔的名字组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时对计算机的定位标识(有时也指地理位置)。 由于IP地址不方便…

Leaflet集成wheelnav在WebGIS中的应用

目录 前言 一、两种错误的实现方式 1、组件不展示 2、意外中的空白 二、不同样式的集成 1、在leaflet中集成wheelnav 2、给marker绑定默认组件 2、面对象绑定组件 3、如何自定义样式 三、总结 前言 在之前的博客中,我们曾经介绍了使用wheelnav.js构建酷炫…

Flink底层原理解析:案例解析(第37天)

系列文章目录 一、flink架构 二、Flink底层原理解析 三、Flink应用场景解析 四、fink入门案例解析 文章目录 系列文章目录前言一、flink架构1. 作业管理器(JobManager)2. 资源管理器(ResourceManager)3. 任务管理器(Ta…

【八股系列】CSS盒模型:掌握网页布局的核心

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【Vue中的<keep-alive>组件:深入解析与实践指南】 🎠 系列专栏:【面试题-八股系列】 💖 感谢大家点赞&…

夏日狂欢水上漂流的爆笑奇遇记

【夏日狂欢,水上漂流的爆笑奇遇记 —— 月亮姐姐的“睫毛漂流记”】在这个炎炎夏日,当烈日炙烤着大地,每一寸空气弥漫着对清凉的渴望时,一场别开生面的“暑期嘉年华”正悄然掀起一场水上狂欢的浪潮。而在这场盛宴中,月…

FPGA实训报告DAY 1(Verilog HDL)

实习日志与总结 日期:2024 年 7 月 10 日 星期三 姓名:XXX 一、实习日志 上午 9:00 - 9:30 按时到达工位,参加部门早会,了解了今天的实习任务和目标,即初步学习 FPGA 简介和 Verilog 基础语法知识。 9:30 - 10:30…

springboot 集成minio,启动报错

springboot 集成 minio 8.5.10 报错 *************************** APPLICATION FAILED TO START *************************** Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: io.minio.S3Base.…

在mybatis-plus中关于@insert注解自定义批处理sql导致其雪花算法失效而无法自动生成id的解决方法

受到这位作者的启发 > 原文在点这里 为了自己实现批量插入&#xff0c;我在mapper层使用insert注解写了一段自定义sql //自定义的批量插入方法 Insert("<script>" "insert into rpt_material_hour(id,sample_time,rounding_time,cur_month,machine_no…

启智畅想火车类集装箱号码识别技术,软硬件解决方案

集装箱号码识别需求&#xff1a; 实时检测车皮号、火车底盘号码、集装箱号码&#xff0c;根据火车类型分为以下三种情况&#xff1a; 1、纯车皮&#xff0c;只检测车皮号&#xff1b; 2、火车拉货箱&#xff08;半车皮&#xff09;&#xff0c;检测车皮号集装箱号码&#xff1b…

基于springboot和mybatis的RealWorld后端项目实战一之hello-springboot

新建Maven项目 注意archetype选择quickstart pom.xml 修改App.java App.java同级目录新增controller包 HelloController.java package org.example.controller;import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotatio…

拒绝废话:computed、watch和methods的区分和使用场景

computed、watch和methods是用于处理数据和响应数据变化的不同方式&#xff0c;三者之间有什么不同呢&#xff0c;贝格前端工场作为10年前端老司机&#xff0c;用浅显的语言给大家分享一下。 computed&#xff1a; computed属性是用来定义一个基于依赖的响应式属性。它会根据…

QT--控件篇四

一、对话框 在软件开发中&#xff0c;对话框&#xff08;Dialog&#xff09;是一种常见的用户界面元素&#xff0c;用于与用户进行交互和获取信息。它通常以模态或非模态的形式出现&#xff0c;模态对话框会阻止用户与应用程序的其他部分交互&#xff0c;直到对话框关闭为止&a…

Linux热键,shell含义及权限介绍

君子忧道不忧贫。 —— 孔丘 Linux操作系统的权限 1、几个常用的热键介绍1、1、[Tab]键1、2、[ctrl]-c1、3、[ctrl]-d1、4、[ctrl]-r 2、shell命令以及运行原理3、权限3、1、什么是权限3、2、权限的本质3、3、Linux中的用户3、4、Linux中文件的权限3、4、1、快速掌握修改权限的…

排序——归并排序及排序章节总结

前面的文章中 我们详细介绍了排序的概念&#xff0c;插入排序&#xff0c;交换排序与选择排序&#xff0c;大家可以通过下面的链接再去学习&#xff1a; ​​​​​​排序的概念及插入排序 交换排序 选择排序 这篇文章就详细介绍一下另一种排序算法&#xff1a;归并排序以及…

ubuntu 虚拟机扩容

在使用vmware创建的ubuntu虚拟机进行linux开发时&#xff0c;安装了docker容器&#xff0c;编译会占用很大的磁盘空间&#xff0c;不想创建新的更大空间的虚拟机linux系统&#xff0c;可以通过gparted图形化工具进行扩容&#xff0c;以下是操作方法 虚拟机设置&#xff0c;扩展…