+ // 中間コード(unicode)に変換\r
+// MultiByteToWideChar(\r
+// CP_UTF8, // 変換先文字コード\r
+// 0, // フラグ(0:なし)\r
+// cInfo->Str, // 変換元文字列\r
+// -1, // 変換元文字列バイト数(-1:自動)\r
+// (unsigned short *)temp_string, // 変換した文字列の格納先\r
+// 1024 // 格納先サイズ\r
+// );\r
+ MultiByteToWideChar(CP_UTF8, 0, pSrc, SrcLength, pUTF16, UTF16Length);\r
+\r
+ // 生成されるUTF-8コードのサイズを調べる\r
+// string_length = WideCharToMultiByte(\r
+// CP_ACP, // 変換先文字コード\r
+// 0, // フラグ(0:なし)\r
+// (unsigned short *)temp_string, // 変換元文字列\r
+// -1, // 変換元文字列バイト数(-1:自動)\r
+// NULL, // 変換した文字列の格納先\r
+// 0, // 格納先サイズ\r
+// NULL,NULL\r
+// );\r
+ string_length = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);\r
+\r
+ // サイズ0 or 出力バッファサイズより大きい場合は、\r
+ // cInfo->Bufの最初に'\0'を入れて、\r
+ // cInfo->BufSizeに0を入れて返す。\r
+// if( string_length == 0 ||\r
+// string_length >= cInfo->BufSize ){\r
+// *(cInfo->Buf) = '\0';\r
+// cInfo->BufSize = 0;\r
+// return(Continue);\r
+// }\r
+\r
+ // 出力サイズを設定\r
+// cInfo->OutLen = string_length;\r
+\r
+ // UTF-8コードに変換\r
+// WideCharToMultiByte(\r
+// CP_ACP, // 変換先文字コード\r
+// 0, // フラグ(0:なし)\r
+// (unsigned short *)temp_string, // 変換元文字列\r
+// -1, // 変換元文字列バイト数(-1:自動)\r
+// cInfo->Buf, // 変換した文字列の格納先(BOM:3bytes)\r
+// cInfo->BufSize, // 格納先サイズ\r
+// NULL,NULL\r
+// );\r
+ cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL);\r
+ // バッファに収まらないため変換文字数を半減\r
+ while(cInfo->OutLen == 0 && UTF16Length > 0)\r
+ {\r
+ UTF16Length = UTF16Length / 2;\r
+ cInfo->OutLen = WideCharToMultiByte(CP_ACP, 0, pUTF16, UTF16Length, cInfo->Buf, cInfo->BufSize, NULL, NULL);\r
+ }\r
+ // 変換された元の文字列での文字数を取得\r
+ Count = WideCharToMultiByte(CP_UTF8, 0, pUTF16, UTF16Length, NULL, 0, NULL, NULL);\r
+ // 変換可能な残りの文字数を取得\r
+ UTF16Length = MultiByteToWideChar(CP_UTF8, 0, pSrc + Count, SrcLength - Count, NULL, 0);\r
+ cInfo->Str += Count - cInfo->EscUTF8Len;\r
+ cInfo->StrLen -= Count - cInfo->EscUTF8Len;\r
+ cInfo->EscUTF8Len = 0;\r
+ if(UTF16Length > 0)\r
+ Continue = YES;\r
+ else\r
+ {\r
+ // 変換不能なため次の入力の先頭に結合\r
+ memcpy(cInfo->EscUTF8, cInfo->Str, sizeof(char) * cInfo->StrLen);\r
+ cInfo->EscUTF8Len = cInfo->StrLen;\r
+ cInfo->Str += cInfo->StrLen;\r
+ cInfo->StrLen = 0;\r
+ Continue = NO;\r
+ }\r