ShiftJisとUTF8間のコード変換(VC++) WindowsAPIのMultiByteToWideChar()関数を利用して、ShiftJisコードをUnicodeへ、WideCharToMultiByte()を関数を利用してUnicodeをShiftJisコードに変換することができます。ShiftJisコードとUTF8コードは、両方ともMultiByteコードですので、ShiftJisコードからUTF8に変換するには、Unicode経由しなければなりません。 例:ShiftJisコードをUTF8コードに変換した後に、また、UTF8コードをShiftJisコードに変換し戻します。 char* szShiftJis = "雨にも負けず、風にも負けず。"; char bufUTF8[MAX_PATH]; char bufShiftJis[MAX_PATH]; void ShiftJisToUTF8() { wchar_t bufUnicode[MAX_PATH]; // まずUniocdeに変換する // サイズを計算する int iLenUnicode = MultiByteToWideChar(CP_ACP, 0, szShiftJis, strlen(szShiftJis)+1, NULL, 0); if (iLenUnicode <= sizeof(bufUnicode)/sizeof(bufUnicode[0])) { MultiByteToWideChar(CP_ACP, 0, szShiftJis, strlen(szShiftJis)+1, bufUnicode, MAX_PATH); // 次に、UniocdeからUTF8に変換する // サイズを計算する int iLenUtf8 = WideCharToMultiByte(CP_UTF8, 0, bufUnicode, iLenUnicode, NULL, 0, NULL, NULL); if (iLenUtf8 <= sizeof(bufUTF8)) { WideCharToMultiByte(CP_UTF8, 0, bufUnicode, iLenUnicode, bufUTF8, sizeof(bufUTF8), NULL, NULL); } } } void UTF8ToShiftJis() { wchar_t bufUnicode[MAX_PATH]; // まずUniocdeに変換する // サイズを計算する int iLenUnicode = MultiByteToWideChar(CP_UTF8, 0, bufUTF8, strlen(bufUTF8)+1, NULL, 0); if (iLenUnicode <= sizeof(bufUnicode)/sizeof(bufUnicode[0])) { MultiByteToWideChar(CP_UTF8, 0, bufUTF8, strlen(bufUTF8)+1, bufUnicode, MAX_PATH); // 次に、UniocdeからShiftJisに変換する // サイズを計算する int iLenUtf8 = WideCharToMultiByte(CP_ACP, 0, bufUnicode, iLenUnicode, NULL, 0, NULL, NULL); if (iLenUtf8 <= sizeof(bufUTF8)) { WideCharToMultiByte(CP_ACP, 0, bufUnicode, iLenUnicode, bufShiftJis, sizeof(bufShiftJis), NULL, NULL); } } } void CXxxxxDlg::OnButton1() { ShiftJisToUTF8(); UTF8ToShiftJis(); } |