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

本文详细介绍了在VisualStudio中如何解决控制台和调试窗口中文乱码的问题,包括使用SetConsoleOutputCP设置UTF-8编码,以及在调试时通过修改变量值添加’s8’后缀显示正常中文。
摘要由CSDN通过智能技术生成

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>

#pragma execution_character_set("utf-8");
using namespace std;

int main()
{
	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;
	}
	return 0;
}

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

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

(1)问题描述

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

#include <iostream>

int main()
{
	SetConsoleOutputCP(65001);
	const char * ptrStr = "中国 hello";
	std::cout << ptrStr << endl;
	return 0;
}

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

(2)解决方法

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

(3)使用场景

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值