RT
txt文档编码格式为UTF8,以前只做过ANSI的,谁有这方面的例子或者链接告诉我一下呗
谢谢
txt文档编码格式为UTF8,以前只做过ANSI的,谁有这方面的例子或者链接告诉我一下呗
谢谢
解决方案 »
- 云台的具体指令是什么?言者有分,谢谢
- 谁有开发校园一卡通方面的资料(软硬件资料都要)?急!急!急!
- 〓 qrlvls(空 气) 申请 VC/MFC 进程/线程/DLL 版块版主
- 求解:static BOOL bDrawVerticle = FALSE; bDrawVerticle = !bDrawVerticle;
- vc中对应access的自动编号的数据类型是什么啊?
- vc.net下如何使用DDK?
- 内存映射文件的简单问题,有关几个函数参数的
- winsock文件传输程序怎么改
- 内存函数大比拼
- 线程问题---》请进!
- 求推荐两本MFC底层通信相关的书籍
- 请问如何控制子窗口的ListCtrl控件。
void CEditStringDoc::Serialize(CArchive& ar)
{
BOOL FirstLine=TRUE;
WCHAR wBuf[2048];
char szBuf[2048];
int i=0;
BOOL LineEnd=FALSE;
char type[10];
char dummy[10];
char *pLine=0;
char UniHead[4]={(char)0xEF,(char)0xBB,(char)0xBF,(char)0};
char UtfHead[3]={(char)0xFF,(char)0xFE,(char)0};
/*
EF BB BF UTF-8
FE FF UTF-16/UCS-2, little endian
FF FE UTF-16/UCS-2, big endian
FF FE 00 00 UTF-32/UCS-4, little endian.
00 00 FE FF UTF-32/UCS-4, big-endian.
*/
CFile *pFile=ar.GetFile();
CString name=pFile->GetFileTitle();//
if((name.Find(".htm")==-1) && (name.Find(".txt")==-1))
{
AfxMessageBox("Only suports *.htm or *.txt files!");
return;
}
//
memset(type,0,10);
memset(dummy,0,10);
//
if (ar.IsStoring())
{
// TODO: add storing code here
int all=m_TextArray.GetSize();
for (int kk=0;kk<all;kk++)
{
strcpy(szBuf,m_TextArray[kk].GetBuffer(2048));
strcat(szBuf,"\r\n");
if(FirstLine)
{
if (m_UTF8) ar.Write(UniHead,3);
else if (m_UNICODE) ar.Write(UtfHead,2);
}// end 1st line
if(m_UTF8)
{
MultiByteToWideChar(CP_ACP,0,szBuf,-1,wBuf,2048);
WideCharToMultiByte(CP_UTF8,0,wBuf,-1,szBuf,2048,0,0);
ar.Write(szBuf,strlen(szBuf));
}
if(m_UNICODE)
{
MultiByteToWideChar(CP_ACP,0,szBuf,-1,wBuf,2048);
ar.Write(wBuf,2*wcslen(wBuf));
}
else
{
ar.Write(szBuf,strlen(szBuf));
}
FirstLine=FALSE;
}// end for
}// end save
else
{// if UTF8 file the 1st 3 chars are: EFh,BBh,BFh
// if UNICODE file the 1st 2 chars are :FFh,FEh
// TODO: add loading code here
m_TextArray.RemoveAll();
memset(szBuf,0,sizeof(szBuf));
while(ar.Read(&szBuf[i],1))
{//
if(FirstLine)
{
if( (szBuf[0]!=(char)0xEF) &&
(szBuf[0]!=(char)0xBB) &&
(szBuf[0]!=(char)0xBF) &&
(szBuf[0]!=(char)0xFF) &&
(szBuf[0]!=(char)0xFE) )
{// normal file
m_UTF8=FALSE;
m_UNICODE=FALSE;
FirstLine=FALSE;
i++;
continue;
}
if( szBuf[0]==(char)0xEF)
{
type[0]=szBuf[0];
continue;
}
if( szBuf[0]==(char)0xBB)
{
type[1]=szBuf[0];
continue;
}
if( szBuf[0]==(char)0xBF)
{
type[2]=szBuf[0];
}
// Is UTF8 file ?
if( (type[0]==(char)0xEF) &&
(type[1]==(char)0xBB) &&
(type[2]==(char)0xBF) )
{// UTF8 file
m_UTF8=TRUE;
m_UNICODE=FALSE;
FirstLine=FALSE;
continue;//i=0
}
// Is UNICODE file ?
if( szBuf[0]==(char)0xFF)
{
type[0]=szBuf[0];
continue;
}
if( szBuf[0]==(char)0xFE)
{
type[1]=szBuf[0];
}
if( (type[0]==(char)0xFF) &&
(type[1]==(char)0xFE) )
{
m_UNICODE=TRUE;
m_UTF8=FALSE;
FirstLine=FALSE;
continue;//i=0
}
}// end firstline
// check line end
if(szBuf[i]==0x0D)
{//
LineEnd=TRUE;
szBuf[i]=0;
ar.Read(dummy,1);//00 or 0a
if(m_UNICODE)
{
szBuf[i+1]=0;
ar.Read(dummy,2);//0a 00
}
}
//
if(LineEnd)
{
if(m_UTF8)
{// utf8 file
MultiByteToWideChar(CP_UTF8,0,szBuf,-1,wBuf,2048);
WideCharToMultiByte(CP_ACP,0,wBuf,-1,szBuf,2048,0,0);
pLine=szBuf;
}
else if(m_UNICODE)
{// Unicode file
WideCharToMultiByte(CP_ACP,0,(WCHAR *)szBuf,-1,(char *)wBuf,2048,0,0);
pLine=(char *)wBuf;
}
else
{// normal file
pLine=szBuf;
}
LineEnd=FALSE;// new line
i=-1;// +1=0 szBuf[0]
//add
m_TextArray.Add(pLine);
memset(szBuf,0,sizeof(szBuf));
}// end LineEnd
i++;//from 0
}// end while
// if file end but no LF
if(szBuf[0]!=0) m_TextArray.Add(szBuf);// last line
if(m_TextArray.GetSize()!=0)
{
UpdateAllViews(0);
}
}
}
char *pBuf=new char[file.GetLength()+1];
file.Read(pBuf,file.GetLength());//读文件到字符串
pBuf[file.GetLength()]=0;//最后一位0结束
CString strTxt=CA2W(pBuf,CP_UTF8);
将UTF8的Buffer转化一下就可以了