读磁盘文件的中文内容打印输出乱码
程序员文章站
2022-04-03 08:52:46
...
情景:
windows下创建的普通txt文件,正常写入中文,保存退出。
利用c++ ifstream类对文件进行行读取,打印输出时中文乱码(排除编译器设置问题)
编译工具:vs2015
#include <fstream>
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
//能用,看着挺麻烦的不想深究
string UTF8ToGB(const char* str)
{
string result;
WCHAR *strSrc;
LPSTR szRes;
//获得临时变量的大小
int i = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
strSrc = new WCHAR[i+1];
MultiByteToWideChar(CP_UTF8, 0, str, -1, strSrc, i);
//获得临时变量的大小
i = WideCharToMultiByte(CP_ACP, 0, strSrc, -1, NULL, 0, NULL, NULL);
szRes = new CHAR[i+1];
WideCharToMultiByte(CP_ACP, 0, strSrc, -1, szRes, i, NULL, NULL);
result = szRes;
delete []strSrc;
delete []szRes;
return result;
}
int main()
{
ifstream ifs;
ifs.open("vs-test.txt");//默认打开
if (ifs.is_open()){
string line;
while (getline(ifs, line))
cout << UTF8ToGB(line.c_str()) << endl;//调用转换函数后乱码解决
}
system("pause");
}
推荐阅读