记录fstream类读取UTF-8时出现乱码问题以及fstream读文件的几种方法

1.处理fstream类读取UTF-8时出现乱码问题,思路先将utf-8转换成UNICODE 再转化成ANSI

#include <string>
#include<fstream>
using namespace std;
string changeUTF8ToAnsi(const char * szU8)
{
    
    int wcsLen = ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), NULL, 0);
    wchar_t* wszMultiByte = new wchar_t[wcsLen + 1];
    ::MultiByteToWideChar(CP_UTF8, NULL, szU8, strlen(szU8), wszMultiByte, wcsLen);
    wszMultiByte[wcsLen] = '\0';
 
    int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszMultiByte, wcslen(wszMultiByte), NULL, 0, NULL, NULL);
    char* szAnsi = new char[ansiLen + 1];
    szAnsi[ansiLen] = '\0';
    ::WideCharToMultiByte(CP_ACP, NULL, wszMultiByte, wcslen(wszMultiByte), szAnsi, ansiLen, NULL, NULL);
    string s=szAnsi;
    delete []szAnsi;
    delete []wszMultiByte;

    return s;
}

2.记录下fstream读取文件

string strFile="E:\\1.TXT";
fstream ifs(strFile);
string line;
while(std::getline(ifs,line))
{
    //line 就是每一行内容
}

//或者
while(!ifs.eof())
{
    std::getline(ifs,line);
    //line 就是每一行内容
}


//一次性读完
std::getline(ifs,line,(char)EOF);
#include <fstream>

int main()
{    
    const char * filename = "E:\\1.TXT";
 
    char * buffer;
    long size;
    ifstream in (filename, ios::in|ios::binary|ios::ate);
    size = in.tellg();
    in.seekg (0, ios::beg);
    buffer = new char [size];
    in.read (buffer, size);
    in.close();
        
    delete[] buffer;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/u014417619/article/details/85854332