我只是有一个文本,包含由服务器libcurl获得的波兰变音标记(如。,?,?,?,?,?,?,?,?)的问题。 我试图在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:标题,它将指示返回的文本使用哪个字符集; 然后查找哪个代码页使用相同的字符集。