プログラミングメモ →目次


コードページ変換(VC++)

コードページの違いシフトJIS、JIS、UTF-8、ユニコード(Unicode)など文字コードを互いに変換する為に、下記の二つのWindowsAPIを使えます。MultiByteToWideChar()関数は、各コードページの文字列をワイド文字列(Unicode)にコンバートします。WideCharToMultiByte()関数は、ワイド文字列(Unicode)を各コードページの文字列にコンバートします。

int MultiByteToWideChar(
    UINT CodePage,               // コードページ
    DWORD dwFlags,               // 文字の種類を指定するフラグ
    LPCSTR lpMultiByteStr,       // マップ元文字列のアドレス
    int cchMultiByte,            // マップ元文字列のバイト数
    LPWSTR lpWideCharStr,        // マップ先ワイド文字列を入れるバッファのアドレス
    int cchWideChar);            // バッファのサイズ

int WideCharToMultiByte(
    UINT CodePage,               // コードページ
    DWORD dwFlags,               // 処理速度とマッピング方法を決定するフラグ
    LPCWSTR lpWideCharStr,       // ワイド文字列のアドレス
    int cchWideChar,             // ワイド文字列の文字数
    LPSTR lpMultiByteStr,        // 新しい文字列を受け取るバッファのアドレス
    int cchMultiByte,            // 新しい文字列を受け取るバッファのサイズ
    LPCSTR lpDefaultChar,        // マップできない文字の既定値のアドレス
    LPBOOL lpUsedDefaultChar);   // 既定の文字を使ったときにセットするフラグのアドレス

例1:シフトJISからユニコード(Unicode)に変換する。
int MultiByteToWideChar(932, 0, lpMultiByteStr, cchMultiByte, lpWideCharStr, cchWideChar);
或いは
int MultiByteToWideChar(CP_ACP, 0, lpMultiByteStr, cchMultiByte, lpWideCharStr, cchWideChar);

例2:シフトJISからUTF-8に変換する。
int MultiByteToWideChar(CP_ACP, 0, lpMultiByteStr, cchMultiByte, lpWideCharStr, cchWideChar);
int WideCharToMultiByte(CP_UTF8, 0, lpWideCharStr, cchWideChar, lpMultiByteStr, cchMultiByte, NULL, NULL);


例3:シフトJISからJISに変換する。
int MultiByteToWideChar(932, 0, lpMultiByteStr, cchMultiByte, lpWideCharStr, cchWideChar);
int WideCharToMultiByte(50220, 0, lpWideCharStr, cchWideChar, lpMultiByteStr, cchMultiByte, NULL, NULL);


ちなみに、シフトJISのコードページは932で、JISのコードページは50220で、CP_UTF8は65001です。