参考:[C++]ifstream和getline获取中文乱码解决方案_getline 读入中文-CSDN博客
#include <iostream>
#include <fstream>
#include <string>
#include <windows.h>using namespace std;std::string UTF8ToGB(const char *str)
{std::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 fin("grades.txt");std::string line;while (std::getline(fin, line)){std::string str = UTF8ToGB(line.c_str()).c_str();cout << str << endl;}// 关闭文件fin.close();return 0;
}