// お約束
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;
}





戻る