1、出现乱码的原因
主要是因为文本文件的编码方式的问题。
2、解决方案
打开文本文件,选择另存为,编码选择为 ANSI ,即可解决。
具体如下图。(测试可行)
3、其他解决方案
网络转载,未经测试。
fstream本身就无法正常读取包含中文路径的文本(具体的解决方案就不细说了网上一堆)。这里主要讲一下getline读取到乱码的解决办法。
添加一个函数转换一下编码
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;
}
在使用getline的时候,把字符转换一下即可
std::string line;
while (std::getline(fin, line))
{
std::string str = UTF8ToGB(line.c_str()).c_str();
}