VScode进行C++编程时,控制台输出代码页出现乱码的原理和解决办法

这篇具有很好参考价值的文章主要介绍了VScode进行C++编程时,控制台输出代码页出现乱码的原理和解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

主要解决三个问题:

1、初学C++的时候,用控制台输出,发现运行到控制台的中文文字和字符全部变成了乱码。为什么呢?这种情况应该怎么解决?

2、编辑器把我们想要输出的内容用UTF-8的方式进行编码进行传输,而控制台收到二进制数据流后用GBK的那一套方式进行解码对应,中文对应不上会出现了乱码,那英文为什么没有变成乱码呢?

3、我们修改完的控制台输出代码页的编码格式后,我们又发现疑问,为什么“请按任意键继续...”变成了英文呢?

情景1:

        我在初学C++的时候遇到一个问题,当我在VScode编辑器用代码 cout << "计算机基础不牢,编程地动山摇!"  进行控制台输出的时候,发现运行到控制台的中文文字和字符全部变成了乱码。为什么呢?这种情况应该怎么解决?

vscode控制台中文乱码,c++,开发语言,vscode

原因:

        其实就是编辑器和控制台输出代码页的编码格式不一致的问题,下面介绍了乱码形成的原因。

编辑器的编码方式:

        其实直接修改编辑器的编码方式,改成GBK也可以,但是这样的编码方式不够通用,UTF-8的兼容性更好。

vscode控制台中文乱码,c++,开发语言,vscode

控制台输出代码页的编码方式:

        右键控制台的上边框,可以在选项里面查看当前代码页的编码方式。

vscode控制台中文乱码,c++,开发语言,vscode

编码解码的工作原理:

vscode控制台中文乱码,c++,开发语言,vscode

        “中”字用UTF-8编码后的二进制数字和用GBK编码后的二进制数字是不一样的,用UTF-8编码后的二进制数字11100100  10111000  10101101,用GBK编码后的二进制数字是11010110   11010000。下面这个网站有中文字符经过UTF-8和GBK编码后的二进制数字(为了方便记录把二进制转化成了十六进制显示)。中文字符UTF-8与GBK编码对照表 (gitee.io)

        当我们在编辑器上输入“中”字时,编码器会用UTF-8的编码方式,把“中”字编码成对应的二进制数字11100100  10111000  10101101储存起来。然后计算机执行cout函数后,把这些UTF-8编码后的二进制数据流传送给控制台,控制台进行解码的时候用的是GBK解码方式,这样传过来的二进制数字11100100  10111000  10101101在对应GBK编码方式下的字符的时候,发现没有这个字符,于是就生成了乱码。

解决思路:

        我最喜欢的一种解决措施就是把控制台输出代码页的编码方式给修改成UTF-8,这样由编辑器传过来的UTF-8编码后的二进制数字就能被控制台正确解码了。  

解决措施:

在#include<windows.h>头文件中用“ SetConsoleOutputCP ( CP_UTF-8 ) ; ”函数,把控制台输出代码页修改成UTF-8编码格式。

​
#include<iostream>
#include<windows.h>
using namespace std;

int main()
{
//    SetConsoleOutputCP ( CP_UTF8 ) ;  
    /*SetConsoleOutputCP ( ) 函数: 是一个Windows API函数调用,用于设置控制台输出代码页。
           它指示控制台应该使用特定的代码页来显示输出,这样就可以在控制台中正确显示特定编码的文本。
            注:CP是Code Page(代码页的缩写)*/
    //CP_UTF8参数: 表示Unicode字符编码中的UTF-8格式。

    cout << "Hello computer world!" << endl ;
    cout << "我是二进制!" <<"但是我一点都不二!" << "很高兴认识你!" << endl ;

    system("pause");
    return 0;    
}

​

修改后:

        修改完我们也有了一个疑问,为什么“请按任意键继续...”变成了英文呢?这个问题我们将在情景3进行详细讨论。

vscode控制台中文乱码,c++,开发语言,vscode

情景2:

vscode控制台中文乱码,c++,开发语言,vscode        编辑器把我们想要输出的内容用UTF-8的方式进行编码进行传输,而控制台收到二进制数据流后用GBK的那一套方式进行解码对应,中文对应不上会出现了乱码,那英文为什么没有变成乱码呢?

原因:

        因为英文无论是UTF-8还是GBK编码所对应的二进制数字是一样的,所以不受编码解码方式的影响。英文编码就是ASCII编码方式,而GBK和Unicode编码(进行优化后就是UTF-8编码)都兼容了ASCII编码方式,所以英文是不会出现乱码现象的。

情景3:

vscode控制台中文乱码,c++,开发语言,vscode

vscode控制台中文乱码,c++,开发语言,vscode

        我们修改完的控制台输出代码页的编码格式化后,我们又发现疑问,为什么“请按任意键继续...”变成了英文呢?

原因:

        因为“请按任意键继续...”这个字符是计算机传输的,计算机想要表达这个意思,会先检测控制台输出代码页的编码格式,如果是GBK编码格式,那计算机就给控制台输出代码页传送中文“请按任意键继续...”所对应的二进制数字;如果是UTF-8编码格式,那计算机就给控制台输出代码页传送英文“Press any key to continue...”所对应的二进制数字,这两个二进制数字肯定也是不一样的。又因为UTF-8能兼容世界上的所有字符,但是英语是受众最广的,所以在UTF-8编码格式的控制台输出代码页上就显示英文了。文章来源地址https://www.toymoban.com/news/detail-632538.html

到了这里,关于VScode进行C++编程时,控制台输出代码页出现乱码的原理和解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++编程案例讲解-基于结构体的控制台通讯录管理系统

    添加联系人 :向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人 :显示通讯录中所有的联系人信息 删除联系人 :按照姓名进行删除指定联系人信息 查找联系人 :按照姓名查看指定联系人信息 修改联系人 :按照姓名重新

    2024年02月05日
    浏览(38)
  • 谷歌浏览器最新版本进行控制台调试js代码时候无法显示代码行数问题解决

    谷歌浏览器最新版本进行控制台调试js代码时候无法显示代码行数问题解决 最新版本谷歌浏览器进行了自动设置关闭那个功能,要自己去设置 解决方法 后面叉掉,重新进行js代码调试看看,如下: 代码行数出来,问题解决

    2024年02月12日
    浏览(52)
  • 控制台输出vue实例

    控制台输出vue实例的两种方法: 在这里我想介绍一下在控制台输出vue实例的两种方法,我觉得其中一种不管是vue框架还是其他框架都是适用的, 我就不说是哪种方法了 大家都可以试一遍: 1、前后端分离的项目中,如果挂载的id名是app,我们可以在控制台中这么打印获取: 2、

    2024年02月10日
    浏览(53)
  • idea-控制台输出乱码问题

    现象描述: 今天在进行IDEA开发WEB工程调式的时候控制台日志输出了乱码,如下截图 其实开发者大多都知道乱码是 编码不一致导致的,但是有时候就是不知到哪些地方不一致,今天我碰到的情况可能和你的不相同 解决方案 : 点击help = edit custom vm options 打开这个文件 末尾追

    2024年02月16日
    浏览(41)
  • eclipse 控制台输出中文乱码【全面解决】

    前言:之前看到一篇文章介绍的方法只能修改单个文件,后来找到一个能彻底解决的文章但是看到的人不多,所以我也想着帮忙传播一下更高效的方法,让更多人少走弯路。 1. Window    Preferences 2.General  Workspace Text file encoding 3.选择Other:  然后自己输入 gbk  4.Apply and Close   

    2024年02月11日
    浏览(59)
  • VSCode:终端控制台常用指令

    以下是一些在 Visual Studio Code 终端控制台中常用的指令: 1.清除终端: 2.列出当前目录中的文件和文件夹: 3.切换到指定目录:: 4.返回上一级目录: 5.创建新文件夹: 6.创建新文件: 7.打开文件: 8.删除文件: 9.删除文件夹: 10.复制文件或文件夹: 11.移动文件或文件夹:

    2024年02月06日
    浏览(65)
  • 关于Tomcat控制台输出乱码的若干问题

    ​ 在学习Maven、Tomcat的过程中,发现会在不同的地方出现中文乱码,原本以为是某个设置没有正确,所以,出现乱码。后来发现,需要在不同的地方来进行调整,才能保证Tomcat在控制台的输出,以及Maven过程在参数传递过程中都不会出现乱码。第一次写文章,不怎么会写,大

    2024年02月09日
    浏览(33)
  • Tomcat输出控制台中文乱码问题彻底解决

    目录 文章目录 前言 一、为什么会出现乱码 二、怎么处理乱码问题 1.修改注册表 2.脚步更改配置 三、修改后检查执行 总结         随着互联网的不断发展,软件部署这门技术也越来越重要,很多人在使用Tomcat部署web应用的过程中都遇过诸多的问题,本文就介绍了处理Tomca

    2024年02月08日
    浏览(43)
  • idea在控制台输出debug日志方法

    控制台输出效果如图 方法如下 1.在pom.xml文件中添加如下坐标 2.如果如下报错 则在main/resource下添加log4j.properties文件

    2024年02月20日
    浏览(43)
  • 【DEVOPS】Jenkins使用问题 - 控制台输出乱码

    部门内部对于Jenkins的使用采取的是Master + Slave Work Node的方式,即作为Master节点的Jenkins只负责任务调度,具体的操作由对应的Slave Work Node去执行。 最近团队成员反馈一个问题:一个Linux系统的Slave Work Node的编译日志输出中,中文部分均为乱码(如下图),这造成问题排查效率

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包