转自第三度: http://www.disandu.com/?p=875
// 今天写了一段输出文本到文件的代码,一开始用CFile输出中文,总是出现乱码,又是百度(Google被墙了)一番,网上的教程基本是只知其一不知其二,大多只讲了输出文件字节序标记和计算宽字符长度这两个注意点,却没有提到字符转换这个最关键的一步。下面的代码分别输出UTF-8和ANSI(简体中文Windows上是GBK编码)两种编码的文本文件。
//
// 写UTF-8文本
// 下列文件类操作中可能抛出一个CFileException异常
try {
CStdioFile hfile( strFilePath, CFile::modeReadWrite);
if(hfile.m_hFile)
{
DWORD dwFileLen = hfile.GetLength();
if (0 == dwFileLen) // 文件为空时写入UTF字节序标记
{
const unsigned char LeadBytes[] = {
0xEF, 0xBB, 0xBF};
hfile.Write(LeadBytes, sizeof(LeadBytes));