// お約束 typedef char c8; typedef wchar_t c16;
ShiftJisをUnicodeへ変換
/*! ************************************************************************************************
*@param pc16Unicode 変換されたユニコード文字列
* pc8ShiftJis 変換元文字列
*///***********************************************************************************************
void ConvertShiftJis2Unicode(c16* pc16Unicode, const c8* pc8ShiftJis)
{
// ユニコードに必要な文字数の取得
s32 s32StrWLen = MultiByteToWideChar(CP_THREAD_ACP, 0, pc8ShiftJis, -1, NULL, 0);
// シフトJIS⇒ユニコード変換
if(MultiByteToWideChar(CP_THREAD_ACP, 0, pc8ShiftJis, (s32)strlen(pc8ShiftJis) + 1, pc16Unicode, s32StrWLen) == 0){
pc16Unicode = NULL;
}
return;
}
|
ユニコードからUTF8へ変換
/*! ************************************************************************************************
*@param pcUtf8 変換されたUTF8文字列(変換に失敗した場合はNULLを格納
* pc16Unicode 変換元文字列
*///***********************************************************************************************
void ConvertUnicode2Utf8(tc* pcUtf8, const c16* pc16Unicode)
{
// 変換後文字列の文字数の取得
s32 s32StrNum = WideCharToMultiByte(CP_UTF8, 0, pc16Unicode, -1, NULL, 0, NULL, NULL);
// ユニコード⇒UTF8変換
if(WideCharToMultiByte(CP_UTF8, 0, pc16Unicode, (s32)wcslen(pc16Unicode) + 1, pcUtf8, s32StrNum, NULL, NULL) == 0){
pcUtf8 = NULL;
}
return;
}
|
ShiftJisをUTF8へ変換
/*! ************************************************************************************************
*@param pcUtf8 変換されたUTF8文字列
* pc8ShiftJis 変換元文字列
*///***********************************************************************************************
void ConvertShiftJis2Utf8(tc* pcUtf8, const c8* pc8ShiftJis)
{
// ユニコード一時格納用
c16* pc16Unicode = (c16*)malloc(sizeof(c16) * (strlen(pc8ShiftJis) + 1) );
// いったんユニコードへ変換
ConvertShiftJis2Unicode(pc16Unicode, pc8ShiftJis);
// そのユニコードをUTF8へ
ConvertUnicode2Utf8(pcUtf8, pc16Unicode);
free(pc16Unicode);
return;
}
|
