分享

c++输出中文乱码解决方案

 lichwoo 2020-10-08

问题的原因应该在cmd的编码和c++程序编码(源文件编码)的不同。cmd默认的是gbk编码,而我用的vs code默认是utf-8编码,因而在输出中文文本时会出现乱码。

但我也遇到了一个比较怪异的情况,就是cmd和cpp文件编码都是gbk的情况下输出中文依然会乱码,但是当输出的文本第一个字符是英文或者空格的时候就不乱码了,这个问题依然没有解决,搜索的时候发现有人也遇到过,但也不知道怎么解决的。

所以解决方案就是全部用utf-8编码(搜索到的还有什么local、wcout、字符宽度、L"  "什么的,但是没太看懂)

1|01.在cmd里先运行命令

chcp 65001

然后再在命令行里启动程序。这种修改cmd编码的方式只能持续到这次命令行程序关闭为止。

2|02.或者在c++源代码里更改cmd编码

#include <cstdlib>//可以引入system("pause")来实现程序的暂停 using namespace std;//引入命名空间std,使得std::cout和std::endl可以直接省去std:: int main() { system("chcp 65001"); return 0; }

 这样有一点我觉得不好的是会显示执行chcp这条命令的返回文本,不太好看

3|03.使用SetConsoleOutputCP

#include <windows.h>//用于函数SetConsoleOutputCP(65001);更改cmd编码为utf8 using namespace std;//引入命名空间std,使得std::cout和std::endl可以直接省去std:: int main() { SetConsoleOutputCP(65001); return 0; }

4|04.使用旧版控制台

在使用上述1、2、3的设置后虽然可以输出在源代码里定义好的中文字符,但是在用cin让用户输入时,却不能正确输出用户输入的中文字符。

在cmd的属性页面勾选使用旧版控制台后解决了上述所有的问题。(虽然不想扔锅给cmd,但这么看来,好像还是cmd的锅

5|05.追根溯源的终极原因

终于,在我遇到这个问题后的四个月后,上次因为这个问题询问过的同学也遇到了这个问题。在同学地努力探索下,终于找到了原因是什么。

直接放他的文章链接了:mingw控制台中文乱码


__EOF__

本文作者:RoadWide
本文链接https://www.cnblogs.com/roadwide/p/10533594.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多