Windows控制台中文乱码问题测试、分析与解决

您所在的位置:网站首页 电脑控制台代码重复执行怎么解决问题 Windows控制台中文乱码问题测试、分析与解决

Windows控制台中文乱码问题测试、分析与解决

2024-07-17 19:01| 来源: 网络整理| 查看: 265

文章目录

一、测试

A、Win10系统

B、Win7 SP1系统

1.VSCode+GCC

2. VS2015

二、分析与总结

1. VS2015

2. MinGW

三、解决UTF8的乱码问题

1. 设置参数

2. 使用替换函数

随着Visual Studio占用的空间的越来越大,有很多东西也许我们根本就用不上。而VSCode + msys2 + Mingw也许是一个不错的选择,编写控制台类应用程序完全是可以的。但是控制台类应用程序内的中文输出会有一些问题,可能会产生乱码。

下面笔者以VSCode 1.48.0+msys2+Mingw64+gcc 10.2.0为基本环境测试在Win10与Win7下的情况。

一、测试 A、Win10系统

如果是在Windows 10 October 2018 Update (build 1809)及以后的系统中应该是没有这种问题了,笔者在Win10 1909系统中使用VSCode+msys2+MinGW+GCC测试未发现有乱码。

测试程序main.cpp为UTF8编码:

1#include 2 3int main() 4{ 5 printf("这是一个测试\n"); 6 return 0; 7}

在VSCode终端调试显示如图:

在调试终端输入chcp查看控制台CodePage为65001,即为UTF8。也就是说VSCode自动将调试终端设置为UTF8来显示输出。

再看看默认的控制台终端,显示的乱码,因为默认控制台终端使用的活动代码页为936,即GBK编码。

使用chcp 65001手动改变代码页为UTF8编码就正常显示了。

我们也可以在代码中直接设置使用UTF8代码页显示:

即使用:

SetConsoleOutputCP(65001);

来设置控制台输出代码页为UTF8,现在使用默认的控制台运行可以看到936代码页下也能正常显示。

我们再试试C++的cout:

可以看到一切正常。

B、Win7 SP1系统 1.VSCode+GCC

还是前面的测试程序,但是调试控制台显示的是乱码:

查看调试控制台代码页为65001,即UTF8,与Win10下的一致,但输出为乱码。

1"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe",

或者执行“选择默认shell”,在弹出的选项中选择Git Bash,然后重启VSCode。

我们进行编译会失败:

我记得VSCode1.47是可以的,估计是更新后的BUG,原因就是使用Windows的路径分隔符问题,Bash需要的是/而不是\。我们先手动编译:

然后调试,发现调试终端依旧是乱码。

我们把在Win7下生成的exe拿到Win10下运行,也可以正常显示。

2. VS2015

VSCode+GCC的方式有问题,我们试试MSVC,笔者使用的VS2015,源文件依旧使用UTF8编码,无

/source-charset:utf-8

编译参数,控制台属性未作任何修改(如果控制台属性有修改过的话会在注册表中留下设置,会影响后面的运行显示,特别是代码页与字体)。

运行结果:

可以看到在设置输出终端代码页为UTF8之前是乱码,但是设置之后就显示正常了。

我们再看看C++的cout输出:

1#include 2#include 3#include 4 5using namespace std; 6 7int main() 8{ 9 printf("测试\n"); 10 SetConsoleOutputCP(65001); 11 printf("测试\n"); 12 cout


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3