HTTP запрос на C++ состоящий из русских символов | библиотека cURL

Отправляю запрос к API Telegram. При вызове метода:

string URL = "http://test.ru/test?text=ТЕКСТ ИЗ РУ.СИМВОЛОВ";

curl_easy_setopt(curl, CURLOPT_URL, URL.c_str()); 

Если в URL будут русские буквы (как в примере выше), curl их почему-то стирает и запрос не к чему не приводит (Ошибка с кодом 3 - CURLE_URL_MALFORMAT - URL-адрес не был правильно отформатирован.).

Как решить данную проблему?

Если использовать "universal character name", то API выдаёт ошибку:

Bad Request: text must be encoded in UTF-8


Ответы (1 шт):

Автор решения: KonekoKawai
string cp1251_to_utf8(const char* str) 
{ 
    string res;
    int result_u, result_c;
    result_u = MultiByteToWideChar(1251, 0, str, -1, 0, 0);
    if (!result_u)
    {
        return 0;
    }
    wchar_t* ures = new wchar_t[result_u];
    if (!MultiByteToWideChar(1251, 0, str, -1, ures, result_u)) {
        delete[] ures;
        return 0;
    }
    result_c = WideCharToMultiByte(65001, 0, ures, -1, 0, 0, 0, 0);
    if (!result_c) {
        delete[] ures;
        return 0;
    }
    char* cres = new char[result_c];
    if (!WideCharToMultiByte(65001, 0, ures, -1, cres, result_c, 0, 0)) {
        delete[] cres;
        return 0;
    }
    delete[] ures;
    res.append(cres);
    delete[] cres;
    return res;
}
→ Ссылка