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

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

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

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

1.在cmd里先运行命令

chcp 65001

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

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

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

 这样有一点我以为很差的是会显示执行chcp这条命令的返回文本,不太好看编码

3.使用SetConsoleOutputCP

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

int main()
{
    SetConsoleOutputCP(65001);
    return 0;
}

4.使用旧版控制台

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

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

5.追根溯源的终极缘由

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

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

相关文章
相关标签/搜索