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); } } }
ネタ元