В C Curl_easy_escape не возвращает выходные данные, если входной символ содержит надстрочный символ WINDOWS - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь использовать curl_easy_escape для кодирования строки, получаю строку со специальными символами, поэтому не знаю, как получить строку специальных символов в c символах. Кодирование не выполняется должным образом в windows, сравните с Linux (Linux его правильный вывод.)

 #include <iostream>
 #include "stdafx.h"
 #include "curl/curl.h"
 #include <locale.h>
 #include <string>

 using namespace std;
 int main(int * argc , char **argv)
{

setlocale(LC_CTYPE, "");
char licid[] = "test¹d98";  
char licid1[] = "test¹d98";

char  nlictest[1000];
wchar_t lictest[1000];

memset(nlictest, '\0', 1000);
memset(lictest, '\0', 1000);

strcpy_s(nlictest, argv[1]);
//wcscpy_s(lictest, (wchar_t*)nlictest);

printf("strlen:%d", strlen(nlictest));
//printf("strlen1:%d", wcslen(lictest));    


CURL *curl = curl_easy_init();
if (curl) {
    //char *output = curl_easy_escape(curl, "test¹d98", strlen(licid));
    char *output = curl_easy_escape(curl, nlictest, strlen(nlictest));
    if (output) {
        printf("Encoded: %s\n", output);
        curl_free(output);
    }
}

return 0;
}

Ввод в командной строке: test¹d98

Windows Вывод : strlen: 8 Закодировано: test% B9d98

In Linux: strlen: 8 Закодировано: test% C2% B9d98

В коде все, что необходимо сделать для правильной обработки этого случая.

...