0.VC(custom)-Unicode,unicoidebig,Asci,UTF8文件read和write

所有的格式都可以直接用UE之类的工具查看Unicode,unicoidebig,Asci,UTF8四种格式,在文本导入时,

CFile file(fileDlg.GetFileName(),CFile::modeRead);
  LPSTR  pBuf;
  DWORD dwFileLen;
  dwFileLen=file.GetLength();
  pBuf=new char[dwFileLen+2];
  pBuf[dwFileLen]=0;
  pBuf[dwFileLen+1]=0;

 file.Read(pBuf,dwFileLen);

之所以+2,是考虑到用unicode时,是两个字节一读,所以结束符必须为两个字节都为0x00;用Uedit32打开就知道,unicode前两个多余字节是0xff,oxfe.后接unicode编缉

unicode big的前两个多余字节是0xfe,0xff.因为unide是两个字节一存,unicode big就是所有的这两个字节的位置互换utf-8的前三个多余字节是0xef,0xbb,0xbf.

直接贴代码:

CFile file(m_szPath,CFile::modeRead);
		LPSTR  pBuf;
		DWORD dwFileLen;
		dwFileLen=file.GetLength();
		pBuf=new char[dwFileLen+2];
		pBuf[dwFileLen]=0;
		pBuf[dwFileLen + 1] = 0;
		file.Read(pBuf,dwFileLen);

		CString szText ;
		const byte *pHead = (const byte *)pBuf;
		if (*pHead == 0xEF && *(pHead + 1) == 0xBB && *(pHead + 2) == 0xBF)//如果是utf8,就去掉前面的三个字节
		{
			int  m_nLen=MultiByteToWideChar(CP_UTF8,0,pBuf + 3,-1,0,NULL);
			wchar_t *strChar=new wchar_t[m_nLen+1];
			strChar[m_nLen]=0 ;
			MultiByteToWideChar(CP_UTF8,0,pBuf + 3,-1,strChar,m_nLen);
			CString str(strChar);
			szText = str ;
			delete[]strChar;
			strChar = NULL ;
		}	
		else if (*pHead==0xFF &&*(pHead+1)==0xFE)//unicode
		{		
			CString str((LPCTSTR)(pBuf + 2));
			szText = str ;
		}
		else if (*pHead==0xFE &&*(pHead+1)==0xFF)//unicode big
		{	
			for(int i=0;i<dwFileLen;i+=2)
			{
				char temp;
				temp=pBuf[i];
				pBuf[i]=pBuf[i+1];
				pBuf[i+1]=temp;
			}
			CString str((LPCTSTR)(pBuf + 2));
			szText=str;
		}
		else//asci
		{
			int  m_nLen=MultiByteToWideChar(CP_ACP,0,pBuf,-1,0,NULL);
			wchar_t *strChar=new wchar_t[m_nLen];
			memset(strChar,0,m_nLen) ;
			MultiByteToWideChar(CP_ACP,0,pBuf,-1,strChar,m_nLen);
			CString str(strChar);
			szText=str;
			delete[]strChar;
			strChar = NULL ;

		}
		delete[]pBuf;
		pBuf = NULL ;

得到的szText就是所需.

当然,

一般导出的txt文件如果要导出成unicode,unicode big时,要注意以下几点

1、要将字符串转成UNICODE编码。

2、换行要使用_T("/r/n")。

3、如果需要被其他程序或编辑器识别,
2、如果需要被其他程序或编辑器识别,

    unicode需要在文件头加上0xFF 0xFE

    unicode big需要在文件头加上0XFE 0XFF

一般导出的txt文件如果要导出成utf-8,asci时,要注意以下几点

1、要将字符串转成多字节编码。

    utf-8需要在文件头加上0XEF 0XBB 0XBF.

去年五月份写的,太乱了,更新下.

你可能感兴趣的:(0.VC(custom)-Unicode,unicoidebig,Asci,UTF8文件read和write)