0


解决Windows中Visual Studio的中文乱码问题

1. 使用Visual Studio 控制台输出中文乱码

(1)解决办法

  1. 分情况讨论,比如在读取文件时,文件的默认编码格式是UTF-8,那么就使用SetConsoleOutputCP函数将控制台输出的编码格式也改为UTF-8,则问题解决。
  2. 比如编程时程序中有中文,则需要更改VS的编码格式与控制台的编码格式一致,这里以UTF-8为例,编程时使用预编译命令:**#pragma execution_character_set(“utf-8”),设置程序编码格式为:UTF-8,另外使用SetConsoleOutputCP函数设置控制台编码格式为:UTF-8**。
  3. 在这里并不推荐使用插件:Force UTF-8( NO BOM) 如下图所示,因为该插件将文件保存为UTF-8的类型,而前面提到的预编译命令、设置输出窗口编码的函数都是设置为:UTF-8 BOM 格式,故使用插件还是可能会出现乱码在这里插入图片描述

(2)SetConsoleOutputCP

该函数是Windows操作系统中的一个API函数,用于设置控制台输出的代码页(code page)。代码页定义了字符集的映射,它告诉操作系统如何解释和显示文本中的字符。

UINT SetConsoleOutputCP(
    UINT wCodePageID
);

wCodePageID:指定要设置的代码页的标识符。默认情况下,Windows控制台使用本地系统的ANSI代码页,这可能导致在输出中无法正确显示非英文字符。
需要注意的是,使用SetConsoleOutputCP可能会影响整个应用程序的输出,因此在使用时请考虑上下文和其他可能的影响。

(3)常用的wCodePageID

  1. UTF-8(CP_UTF8) (1) 标识符:‘CP_UTF8’或‘65001’ (2) Unicode字符编码,可表示几乎所有的字符,是一种变长字符编码。
  2. ANSI(CP_ACP) (1) 标识符:‘CP_ACP’或‘0’ (2) 系统默认的ANSI(单字节字符集)代码页,通常是Latin-1或Windows-1252.
  3. 简体中文 GB2312(CP_ACP) (1) 标识符:936 (2) 用于简体中文的GB2312字符集。

(4)使用场景

这里以在Windows中读取文本文件为例进行演示。

#include<iostream>#include<fstream>#include<string>#include<windows.h>#pragmaexecution_character_set("utf-8");usingnamespace std;intmain(){SetConsoleOutputCP(65001);
    ifstream ifs;
    ifs.open("test01.txt", ios::in);if(ifs.is_open()){
        string line;while(std::getline(ifs, line)){
            cout << line << endl;}
        ifs.close();}else{
        cout <<"文件打开失败"<< endl;}return0;}

输出结果如下图所示:
在这里插入图片描述

2. Visual Studio中调试窗口内中文乱码问题

(1)问题描述

上一节解决的是控制台输出中文乱码,那么在调试程序时,当程序中包含中文,或者编程读取包含中文的文件时,大家会发现,在调试窗口中显示的中文仍然是乱码的,如调试下面的程序(记得打上断点)。

#include<iostream>intmain(){SetConsoleOutputCP(65001);constchar* ptrStr ="中国 hello";
    std::cout << ptrStr << endl;return0;}

在调试窗口中查看指针变量ptrStr的值,如下所示。
在这里插入图片描述

(2)解决方法

  1. 将变量ptrStr添加到监视窗口;
  2. 然后鼠标双击变量ptrStr;
  3. 修改其值,在ptrStr后面加上:“,s8”;
  4. 中文显示正常。

(3)使用场景

在这里插入图片描述


本文转载自: https://blog.csdn.net/weixin_46164756/article/details/136188882
版权归原作者 自由的7 所有, 如有侵权,请联系我们删除。

“解决Windows中Visual Studio的中文乱码问题”的评论:

还没有评论