MFC CFile::Open 配合 CStdioFile 寫入 CString(Unicode 建構時為 UTF-16),若直接 WriteString 會寫入 UTF-16 LE(帶 BOM),即 Unicode 文件。
file.Open(path, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);CString 轉為 char*(CT2A 或 WideCharToMultiByte(CP_ACP,...)),再 file.Write(buf, len);0xFF 0xFE),即為純 ANSI。CFile file;
file.Open(_T("test.txt"), CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);
CStringW str = L"中文測試";
int len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
char* buf = new char[len];
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, len, NULL, NULL);
file.Write(buf, len - 1); // 不寫入結束符 \0
delete[] buf;
file.Close();
參考:MFC 文件編碼控制詳解