如何判断URL汉字为哪种编码并相应解码?(C语言)
例如,从截取的http://www.sogou.com/sie?hdq=AQxRG&query=%D6%D0%CE%C4%B1%E0%C2%EB&p=99350103&oq=&ri=-2网址中取出%D6%D0%CE%C4%B1%E0%C2%EB,如何判定是utf-8还是gb2312?如何解码?谢谢各位大侠。(C语言)
------解决思路----------------------
举个例子,比如python有个库,可以guess一下编码,可以做相关搜索。
------解决思路----------------------
刚好最近在弄
#include
#define UNICODE 1
#include
#include
#include
#include
typedef _com_ptr_t<_com_iiid>> IMultiLanguage3Ptr;
int main()
{
CoInitialize(NULL);
{
IMultiLanguage3Ptr pML(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC);
char data[] = { 0xD6, 0xD0, 0xCE, 0xC4, 0xB1, 0xE0, 0xC2, 0xEB };
int isize = sizeof(data);
DetectEncodingInfo result[32];
int result_count = sizeof(result) / sizeof(result[0]);
HRESULT hr = pML->DetectInputCodepage(MLDETECTCP_NONE, 0, data, &isize, result, &result_count);
if (!SUCCEEDED(hr))
{
fprintf(stderr, "Failed with 0x%x\n", hr);
CoUninitialize();
return hr;
}
for (int i = 0; i
{
WCHAR desc[100] = {0};
pML->GetCodePageDescription(result[i].nCodePage, result[i].nLangID, desc, 100);
printf("CP:%d (%S)\n", result[i].nCodePage, desc);
}
}
CoUninitialize();
return 0;
}
输出:
CP:936 (Chinese Simplified (GB2312))
------解决思路----------------------
utf8和gb2312的码库是重的,无法判定每个字符。唯一靠谱一点的是整段文字一起判定,有一个不是utf8的就是gb。就算是这样子也有例外,比如说我的同事全名就是无法判定utf8和gb的。