記錄fstream類讀取UTF-8時出現亂碼問題以及fstream讀檔案的幾種方法
阿新 • • 發佈:2019-01-06
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; }