MFC/C++ CFile写入文件数据,输出utf-8的文本。(防止中文乱码)

2023-11-01

需求说明:有时候用CFile写入文件的内容会出现中文乱码问题,这时候就需要把写入的文件编码类型改为utf-8的类型。

代码功能:输出utf-8格式的内容到文件中

作者:weekdawn

try
{
	 //创建mht文件,并写入数据
	 mhtFile.Open(filePath, CFile::modeCreate|CFile::modeWrite); 	//mhtFile为CFile类型,filePath为文件路径CString类型
	 //-------以下是将Unicode字符转为utf-8字符,这样才能正常显示中文
	 DWORD dwFileLen = mhtFile.GetLength();
	 if (0 == dwFileLen)
	 {
	  const unsigned char LeadBytes[] = {0xEF, 0xBB, 0xBF};
	  mhtFile.Write(LeadBytes,sizeof(LeadBytes));
	 }
	 int nSrcLen = (int)wcslen(content);//content为要写入的文本
	 CStringA utf8String(content);
	 int nBufLen = (nSrcLen+1) * 6;
	 LPSTR buffer = utf8String.GetBufferSetLength(nBufLen);
	 int nLen = AtlUnicodeToUTF8(content, nSrcLen, buffer, nBufLen);
	//上面的函数AtlUnicodeToUTF8()需头文件:<atlenc.h>
	//功能:将unicode转换成utf-8
	 buffer[nLen] = 0;
	 utf8String.ReleaseBuffer();
	 mhtFile.SeekToEnd();
	 //将转码后的内容写入mht文件
	 mhtFile.Write(utf8String.GetBuffer(),nLen);
	 mhtFile.Write("/r/n",2);
	 mhtFile.Close();
}
catch(CFileException *e)
{
	 CString errInfo;
	 errInfo.Format(_T("%s"),e->ReportError());
	 MessageBox(_T("文件创建失败!") + errInfo);
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC/C++ CFile写入文件数据,输出utf-8的文本。(防止中文乱码) 的相关文章

随机推荐