MFC - UTF-8/UTF-16のファイル読込・保存

VC++8.0(2005) 以降の fopen では ccs でエンコーディングを指定することができる

MSDN - fopen, _wfopen


CStdioFile は FILE* を受け取ることができるので以下のようにできる


まずは読み込み


UTF-8

CString line;
CStdioFile file(_tfopen(_T("C:\\utf8.txt"), _T("r, ccs=UTF-8")));
while (file.ReadString(line)) {
    AfxMessageBox(line);
}

file.Close();


UTF-16

CString line;
CStdioFile file(_tfopen(_T("C:\\utf16.txt"), _T("r, ccs=UTF-16LE")));
while (file.ReadString(line)) {
    AfxMessageBox(line);
}

file.Close();

次に保存


UTF-8

CStdioFile file(_tfopen(_T("C:\\a.txt"), _T("w, ccs=UTF-8")));
file.WriteString(_T("abcあいうえお"));

file.Close();

UTF-16

CStdioFile file(_tfopen(_T("C:\\a.txt"), _T("w, ccs=UTF-16LE")));
file.WriteString(_T("abcあいうえお"));

file.Close();


fstream でもどうにかならないものか・・・