libcurl(c++)中的波兰变音标记

Polish diacritical marks in libcurl (c++)

本文关键字:c++ libcurl      更新时间:2023-10-16

我只是对libcurl从服务器上获得的包含波兰语变音标记的文本有问题(例如,brow,ć,É,ł,ń,ó,ś,ż)。我正在尝试在Windows C++控制台应用程序中正确显示此文本。

我把类似的东西放在控制台屏幕上解决了类似的问题:

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

通过将我的源文件的代码页切换到:DOS代码页852(中欧)。不幸的是,它不适用于从libcurl传递的文本。我认为它只适用于直接写入代码的文本。你能告诉我一些有用的信息吗?我不知道如何解决这个问题。

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

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;
}

你能在不转换字符的情况下提出更好的解决方案吗?

libcurl返回的网页内容将使用网页的字符集。这里可能发生的情况是,它不是您的"代码集"使用的字符集,我认为这是MS Windows中区域设置的术语。

libcurl应该让您查看从服务器接收到的HTTP响应的头部。查看Content-Type:标头,它将指示返回的文本使用哪个字符集;然后查找哪个代码页使用相同的字符集。