std::wstring UnicodeStringFromUtf8String()

in src/Windows/curl_easy.cpp [89:122]


std::wstring UnicodeStringFromUtf8String(_In_ const std::string& ansiString)
{
    std::wstring unicodeString;

    if (ansiString.empty())
    {
        return L"";
    }

    auto wideCharSize = MultiByteToWideChar(
        CP_UTF8, MB_ERR_INVALID_CHARS, ansiString.c_str(), -1, nullptr, 0);
    if (wideCharSize == 0)
    {
        throw curl_easy::error(
            GetLastError(), "Unable to convert string to unicode (sizing)");
    }
    unicodeString.reserve(wideCharSize);
    unicodeString.resize(wideCharSize - 1);

    wideCharSize = MultiByteToWideChar(
        CP_UTF8,
        MB_ERR_INVALID_CHARS,
        ansiString.c_str(),
        -1,
        &unicodeString[0],
        wideCharSize);
    if (wideCharSize == 0)
    {
        throw curl_easy::error(
            GetLastError(), "Unable to convert string to unicode (conversion)");
    }

    return unicodeString;
}