void CREditView::LoadFile(CString strFile)
{
SetWindowText(_T(""));
CRichEditCtrl &RCtrl = GetRichEditCtrl(); CFile* pInputFile = NULL;
try
{
pInputFile = new CFile(strFile, CFile::modeRead | CFile::shareDenyNone);
EDITSTREAM strm;
strm.dwCookie = (DWORD) pInputFile;
strm.pfnCallback = EditStreamCallbackReadFromFile;
long lResult = RCtrl.StreamIn(SF_TEXT, strm);
pInputFile->Close();
}
catch (CFileException* pEx)
{
pEx->Delete();
}
delete pInputFile;
RCtrl.SetModify(FALSE);
return;
}
DWORD CALLBACK EditStreamCallbackReadFromFile(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
ASSERT_KINDOF(CFile, pFile); *pcb = pFile->Read(pbBuff, cb); return 0;
}问题描述:
CRichEditCtrl的StreamIn方法是从指定的输入流中获得的文本来替换CRichEditCtrl对象中的文本。这个LoadFile函数可以从指定的文件名来读取文本到RichEdit中,当文本文件为Ansi编码时,无乱码。当为Unicode、UTF-8编码时,会出现乱码。我知道要根据文件内部编码头几个字节来判断,但是对于上面的代码不知该如何修改。
{
SetWindowText(_T(""));
CRichEditCtrl &RCtrl = GetRichEditCtrl(); CFile* pInputFile = NULL;
try
{
pInputFile = new CFile(strFile, CFile::modeRead | CFile::shareDenyNone);
EDITSTREAM strm;
strm.dwCookie = (DWORD) pInputFile;
strm.pfnCallback = EditStreamCallbackReadFromFile;
long lResult = RCtrl.StreamIn(SF_TEXT, strm);
pInputFile->Close();
}
catch (CFileException* pEx)
{
pEx->Delete();
}
delete pInputFile;
RCtrl.SetModify(FALSE);
return;
}
DWORD CALLBACK EditStreamCallbackReadFromFile(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
ASSERT_KINDOF(CFile, pFile); *pcb = pFile->Read(pbBuff, cb); return 0;
}问题描述:
CRichEditCtrl的StreamIn方法是从指定的输入流中获得的文本来替换CRichEditCtrl对象中的文本。这个LoadFile函数可以从指定的文件名来读取文本到RichEdit中,当文本文件为Ansi编码时,无乱码。当为Unicode、UTF-8编码时,会出现乱码。我知道要根据文件内部编码头几个字节来判断,但是对于上面的代码不知该如何修改。
UTF开头是:0xEF, 0xBB, 0xBF
{
CFile* pFile = (CFile*) dwCookie;
ASSERT_KINDOF(CFile, pFile); *pcb = pFile->Read(pbBuff, cb); return 0;
}
判断头 在这边吗 ?
以下是可以自动判断文本文件编码的工程http://blog.csdn.net/akof1314/archive/2011/01/02/6113038.aspx