std::string Sjis2Utf8(const std::string& src){ if(src.empty())return ""; //ワイド文字列のバッファ確保 const int cchWideChar = ::MultiByteToWideChar(CP_ACP, 0, src.c_str(), -1, NULL, 0); if( cchWideChar <= 0 )return ""; std::wstring strw; strw.resize(cchWideChar); //ワイド文字列へ変換 const int nUnicodeCount = ::MultiByteToWideChar(CP_ACP, 0, src.c_str(), -1, &strw[0], cchWideChar); if( nUnicodeCount <= 0 )return ""; //UTF8のバッファ確保 const int cchMultiByte = ::WideCharToMultiByte(CP_UTF8, 0, strw.c_str(), -1, NULL, 0, NULL, NULL); if( cchMultiByte <= 0 )return ""; std::string ret; ret.resize(cchMultiByte); //UTF-8へ変換 const int nMultiCount = ::WideCharToMultiByte(CP_UTF8, 0, strw.c_str(), -1, &ret[0], cchMultiByte, NULL, NULL); if( nMultiCount <= 0 )return ""; return ret;}