问题描述:
C++中cout输出中文乱码的原因是什么呢?如何修复控制台输出中文乱码?指出下面代码中是如何解决中文乱码的呢?
问题解答:
在 C++ 中,cout
输出中文乱码的原因通常是因为控制台的字符编码与程序使用的编码不匹配。默认情况下,控制台使用的字符编码可能是系统的默认编码(例如 Windows 的 GBK 编码),而程序可能使用的是 UTF-8 编码。这种编码的不匹配就会导致在控制台上输出中文时出现乱码。
解决中文乱码的方法
你提供了两种方法来解决控制台输出中文乱码的问题:
-
方式1:使用
SetConsoleOutputCP
函数- 在代码头部引入
windows.h
头文件。 - 在
main
函数中使用SetConsoleOutputCP(CP_UTF8);
将控制台的输出编码设置为 UTF-8,这样程序输出的 UTF-8 编码字符就能正确显示。
#include "windows.h" int main() { SetConsoleOutputCP(CP_UTF8); // 其他代码 }
- 在代码头部引入
-
方式2:使用
system("chcp 65001")
- 在
main
函数中使用system("chcp 65001");
命令,将控制台的代码页(Code Page)设置为 65001,即 UTF-8 编码。这样可以使控制台正确地显示 UTF-8 编码的中文字符。
int main() { system("chcp 65001"); // 其他代码 }
- 在
示例代码中解决中文乱码的方式
在你提供的代码中,使用了 方式2 来解决中文乱码问题:
int main()
{
system("chcp 65001");
// SetConsoleOutputCP(CP_UTF8);
cout << FAT_BMI << endl;
cout << "焦耳转卡路里需要除以:" << J2C_RATE << endl;
return 0;
}
代码中的 system("chcp 65001");
这行命令将控制台的代码页设置为 UTF-8,从而使 cout
输出的中文字符可以正确显示,避免了乱码问题。这是因为程序输出的字符串是 UTF-8 编码的,而设置代码页为 65001 后,控制台也能识别和正确显示 UTF-8 编码的字符。
花絮:
C++中cout输出中文乱码的原因是什么呢?如何修复控制台输出中文乱码?
方式1:在代码头部引入:#include "windows.h"。然后在main函数内部编写:SetConsoleOutputCP(CP_UTF8);
方式2:在main函数内部编写:system("chcp 65001");
指出下面代码中是如何解决中文乱码的呢?
// Created by 黑马程序员.
#include "iostream"
// #include "windows.h"
using namespace std;
#define FAT_BMI 28
#define J2C_RATE 4.19 // 焦耳转卡路里的比率
// 符号常量:#define 名称(标识符) 常量值,符号常量定义在代码的头部
// 符号常量的定义 不需要分号结尾
// 方式1:引入windows.h库
// 方式2:system("chcp 65001");
int main()
{
system("chcp 65001");
// SetConsoleOutputCP(CP_UTF8);
// 使用符号常量的语句,就是正常的代码了,要写在main函数中
// 如何使用:使用符号常量 就直接用它的名字即可
cout << FAT_BMI << endl;
cout << "焦耳转卡路里需要除以:" << J2C_RATE << endl;
return 0;
}