Windows下控制台应用程序乱码解决方案

2025-10-03 12:54:55

1、首先,我们要明白乱码的原因。原因肯定是编码与解码不一致导致的,我们先来看看编码与解码的情况。

打开命令提示符窗口,在标题栏上右键,属性。

Windows下控制台应用程序乱码解决方案

2、在打开的属性窗口中,选择选项标签页,可以看到当前代码页组框中有“936 (ANSI/OEM -简体中文 GBK)”的字样,很明显命令提示符的解码方式是GBK。

Windows下控制台应用程序乱码解决方案

3、再来看看源代码main.cpp的编码。可以在记事本的另存为对话框中看到,编码是UTF-8的方式。而且我的QtCreator的默认解码方式也是UTF-8,所以能够正确解码,否则源代码也会是乱码。

Windows下控制台应用程序乱码解决方案

4、来看看编译运行的情况。源代码中的“你好,C++!”已经变成火星文了,不知道怎么打火星文的童鞋有福了。

Windows下控制台应用程序乱码解决方案

5、既然是编码的问题,当然从编码入手了。我们把源代码的编码方式改了不就行了。

用记事本打开main.cpp,然后打开另存为对话框,对话框的下方的编码我们选择ANSI。然后确定覆盖原来的main.cpp。

Windows下控制台应用程序乱码解决方案

6、这时候我们的QtCreator不乐意了,弹出了个对话框。

意思是,源代码在外部被改写,要不要重新载入,选择Yes to All。

Windows下控制台应用程序乱码解决方案

7、这时候又出现问题了,窗体顶部弹出个条,提示我们无法用UTF-8解码main.cpp。当然不能用UTF-8了,因为我们把它转换成了ANSI。而且,源代码中的汉字也变成了一团不知道是啥的东西。

Windows下控制台应用程序乱码解决方案

8、点击那个条上的 Select Encoding 。我们选择GBK那行,然后点击按编码重新载入。之后一切又都好了。

Windows下控制台应用程序乱码解决方案

9、再运行下看看。

好了,运行正常。对于强迫症者来说,感觉呼吸都轻松多了。

Windows下控制台应用程序乱码解决方案

1、一个项目可能有很多文件,那么每一个都这么改还真的是很麻烦。有没有更简单的方法呢?这就是我们的方法二。实际上CMD有个命令chcp可以修改命令提示符的解码方式。我们来试试看。

打开一个命令提示符窗口,输入chcp 65001。65001就是UTF-8。

Windows下控制台应用程序乱码解决方案

2、可以看到,命令提示符确实是变成了UTF-8。

好的,我们把源代码用记事本再次的转换为UTF-8,然后再运行看看情况。

可是我们发现,我们的程序依然是乱码。而且,程序窗口的解码方式并没有变。这可如何是好。

Windows下控制台应用程序乱码解决方案

3、没关系,不知道你知不知道C语言有个库叫stdlib.h的,可以通过system()函数调用各命令的。那我们就在程序运行的时候调用命令来改解码方式。

代码如下:

#include <iostream>

#include <cstdlib>using namespace std;int main()

{

    system("chcp 65001");

    system("cls");

    cout<<"你好,C++!"<<endl;

    return 0;

}

我们来看看运行情况

Windows下控制台应用程序乱码解决方案

4、已经可以看到正常的汉字了,除了“你”没有显示以外,其他的看起来都还不错。

注意:如果你的仍然是乱码。你可以试着在命令提示的属性窗口中,字体标签页,将字体改为 Lucida console,然后再试试。

至于为什么“你”字没法正常显示,我猜测是因为BOM的问题。先不管这个问题了,我们在“你”前面加几个空格就行了。

再来运行看看。

好了,问题解决了。空气又变的清新了。

Windows下控制台应用程序乱码解决方案

1、虽然,加两行代码能解决问题,而且也方便了很多。但是无缘无故加两行代码,对于强迫症来说是有点难受的。而且据说system()无法跨平台使用,这个也是不太好的。

我们来看看终极大杀器,一劳永逸解决问题。

修改注册表配置。

打开注册表,找到路径:HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe

将右侧的CodePage的值修改为65001。我们甚至可以改字体的大小。

Windows下控制台应用程序乱码解决方案

2、有童鞋可能看到了另一个注册表项,而且看起来很熟悉,我们也顺便把它的值改一改吧。

Windows下控制台应用程序乱码解决方案

3、我们将

    system("chcp 65001");

    system("cls");

这两行代码注释掉,然后再运行代码看看。

没有问题了。

我以后都没有问题了,耶!

Windows下控制台应用程序乱码解决方案

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢