MFCの基礎 - UTF-8

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2020年2月6日 (木) 03:37時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == wchar_tはUTF-16に対応しており、Shift-JIS等からUTF-8に直接的で変換できない。<br> ここでは、様々な文字コードからUTF-8へ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

wchar_tはUTF-16に対応しており、Shift-JIS等からUTF-8に直接的で変換できない。
ここでは、様々な文字コードからUTF-8へ変換する方法を記載する。


サンプルコード

 #include <windows.h>
 
 char *buf1;
 wchar_t buf2[512];
 
 // Shift-JISからUTF-16へ変換
 ::MultiByteToWideChar(CP_ACP, 0, buf1, -1, buf2, 512);
 
 // UTF-16からUTF-8へ変換
 ::WideCharToMultiByte(CP_UTF8, 0, buf2, -1, buf1, 512, NULL, NULL);


UTF-8では、ファイルの先頭にUTF-8であることを示す3バイトのデータ0xEF、0xBB、0xBFが付加されている。(BOMという)
UTF-8のファイルを出力する場合、以下のように出力しないと、UTF-8として正しく認識されない。
(BOMが付加されていないUTF-8をUTF-8Nという)

 buf2[0] = 0xEF;
 buf2[1] = 0xBB;
 buf2[2] = 0xBF;
 buf2[3] = nullptr;