欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

读磁盘文件的中文内容打印输出乱码

程序员文章站 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");
}

 

相关标签: 中文乱码