C++ 用libcurl(c+;+;)擦亮变音符号

C++ 用libcurl(c+;+;)擦亮变音符号,c++,windows,libcurl,C++,Windows,Libcurl,我只是对libcurl从服务器获取的包含波兰语发音符号(例如ą,ć,ę,ł,Ň,ó,ś,ź,ż)的文本有一个问题。我试图在Windows C++控制台应用程序中正确显示这个文本。 我解决了类似的问题,将类似的东西放在控制台屏幕上: cout << "ąćęźół"; coutlibcurl返回的网页内容将使用网页的字符集。这里可能发生的事情是,它不是您的“代码集”使用的字符集,我假定MS Windows术语表示语言环境 libcurl应该让您查看从服务器接收的HTTP响应的头。查看

我只是对libcurl从服务器获取的包含波兰语发音符号(例如ą,ć,ę,ł,Ň,ó,ś,ź,ż)的文本有一个问题。我试图在Windows C++控制台应用程序中正确显示这个文本。 我解决了类似的问题,将类似的东西放在控制台屏幕上:

cout << "ąćęźół";

coutlibcurl返回的网页内容将使用网页的字符集。这里可能发生的事情是,它不是您的“代码集”使用的字符集,我假定MS Windows术语表示语言环境


libcurl应该让您查看从服务器接收的HTTP响应的头。查看内容类型:header,它将指示返回文本使用的字符集;然后查找使用相同字符集的代码页。

我已经为我的问题编写了临时解决方案。它工作得很好,但我不满足于这种方式:

char* cpl(const char* input)
{
        size_t length = strlen(input);
        char* output = new char[length+1];

        /*  Order of the diacretics
            Ą ą Ć ć Ę ę
            Ł ł Ń ń Ó ó
            Ś ś Ź ź Ż ż
        */
        const size_t pld_in[] = {
            0xA1,0xB1,0xC6,0xE6,0xCA,0xEA,
            0xA3,0xB3,0xD1,0xF1,0xD3,0xF3,
            0xA6,0xB6,0xAC,0xBC,0xAF,0xBF,
        };
        const size_t pld_out[] = {
            0xA4,0xA5,0x8F,0x86,0xA8,0xA9,
            0x9D,0x88,0xE3,0xE4,0xE0,0xA2,
            0x97,0x98,0x8D,0xAB,0xBD,0xBE
        };

        for(size_t i = 0; i < length; i++)
        {
            bool modified = false;
            for(size_t j = 0; j < 18; j++)
            {
                if(*(input + i) == (*(pld_in + j)) + 0xFFFFFF00)
                {
                    *(output + i) = *(pld_out + j);
                    modified = true;
                    break;
                }
            }
            if(!modified)
                *(output + i) = *(input + i);
        }
        *(output + length) = 0x00;

        return output;
}
char*cpl(const char*input)
{
尺寸长度=strlen(输入);
字符*输出=新字符[长度+1];
/*发音顺序
Ą ą Ć ć Ę ę
Ł ł Ń ń Ó ó
Ś ś Ź ź Ż ż
*/
常量大小pld(单位[]={
0xA1,0xB1,0xC6,0xE6,0xCA,0xEA,
0xA3,0xB3,0xD1,0xF1,0xD3,0xF3,
0xA6,0xB6,0xAC,0xBC,0xAF,0xBF,
};
const size\u t pld\u out[]={
0xA4,0xA5,0x8F,0x86,0xA8,0xA9,
0x9D,0x88,0xE3,0xE4,0xE0,0xA2,
0x97,0x98,0x8D,0xAB,0xBD,0xBE
};
对于(大小i=0;i

你能不能在不转换字符的情况下为这个问题提出更好的解决方案?

网站抛出:“text/html;charset=iso-8859-2”。因此,我尝试使用批处理文件chcp 28592 myapp.exe更改控制台代码页,但没有任何更改;/ID 28592是ISO-8859-2的标识符。我尝试过:SetConsoleOutputCP(28592);同样糟糕的迹象。Windows控制台API根本不支持Unicode,即使您指定了输出代码页。这是众所周知的限制。将下载的数据输出到其他文件,如文件,您将看到数据不是问题所在。处理非ASCII文本时,通常更容易使用
std::wstring
。但即便如此,VC++在控制台中也不太支持uncode。