UTF-8 文件读写

来源:互联网 发布:windows.old还原win10 编辑:程序博客网 时间:2024/06/08 19:35
///////////////////////////////////////////////////////////
CString UTF8ToUnicode(byte  *szUTF8)  
{     
CString strret;  
strret=_T("");  
if(!szUTF8)  
return strret;  
//获取转换后所需串空间的长度    
int   wcsLen =  MultiByteToWideChar(CP_UTF8,0,(LPSTR)szUTF8,strlen((char*)szUTF8),NULL,0);  
LPWSTR   lpw=new   WCHAR[wcsLen+1];   
if(!lpw)  
return strret;  
memset(lpw,0,(wcsLen+1)*sizeof(wchar_t));   
//实施转换   
MultiByteToWideChar(CP_UTF8,0, (LPSTR)szUTF8,   
strlen((char *)szUTF8),  (LPWSTR)lpw,  wcsLen);   
CString str(lpw);  
delete[]   lpw;  
return str;  
}  
///////////////////////////////////////////////////////////


///读取 utf-8 文本文件
CFile file;
file.Open(strPathSrc,CFile::modeRead);
file.Seek(3,0);
int iFileLong=(int)file.GetLength();
// DisplayMsg(_T("%d file long"),iFileLong);
byte *bChar=new byte[iFileLong-1];//记录1位


file.Read(bChar,iFileLong-1);
bChar[iFileLong-3]=0xd;//最后加入一个换行
bChar[iFileLong-2]=0xa;


CString strResult=UTF8ToUnicode(bChar);
// AfxMessageBox(strResult);


vector<CString> strLineVec;
CString strLine;
for (int i=0; i<strResult.GetLength(); i++)
{
if (strResult.GetAt(i)=='\n')
{
strLine.Trim();
strLineVec.push_back(strLine);
strLine.Empty();
}
{
strLine+=strResult.Mid(i,1);
}
}


// for (int i=0; i<(int)strLineVec.size(); i++)
// {
// AfxMessageBox(strLineVec.at(i));
// }


delete []bChar;
file.Close();
原创粉丝点击