C,C++

string(UTF-8)을 유니코드로 변환하여 다시 String 형으로

풍경비엠 2013. 1. 16. 23:56

static std::string wcs_to_mbs(std::wstring const& str, std::locale const& loc)
{
typedef std::codecvt<wchar_t, char, std::mbstate_t> codecvt_t;
std::codecvt<wchar_t, char, std::mbstate_t> const& codecvt = std::use_facet<codecvt_t>(loc);
std::mbstate_t state = std::mbstate_t();
std::vector<char> buff((str.size() + 1) * codecvt.max_length());
wchar_t const* in_next = str.c_str();
char* out_next = &buff[0];
codecvt_t::result r = codecvt.out(state, str.c_str(), str.c_str() + str.size(), in_next, &buff[0], &buff[0] + buff.size(), out_next);
return std::string(&buff[0]);
}


static std::string utf8StringToUnicodeString(std::string UTF8String)
{
wchar_t strUnicode[256] = {0,};
char    strMultibyte[256] = {0,};
strcpy_s( strMultibyte,256,(UTF8String.c_str()));
int nLen = MultiByteToWideChar(CP_UTF8, 0, strMultibyte, strlen(strMultibyte), NULL, NULL);
MultiByteToWideChar(CP_UTF8, 0, strMultibyte, strlen(strMultibyte), strUnicode, nLen);
std::locale loc("KOR");
return wcs_to_mbs(strUnicode,loc);
}

 

사용법

utf8StringToUnicodeString(String형 UTF-8  문자열)

String형으로 유니코드 문자열 반환