wininet不能正确处理使用GB2312编码的url

大部分网站的url是基于utf8的,例如google,但有些却是基于GB2312的,例如baidu。

基于GB2312的url,ie能正确处理,但wininet却不能正确处理,wininet把这个网站返回的gb码当成utf8, 先转为utf16,然后又转成utf8,最后按照gb显示出来就变成了“锟斤拷”了,所以就需要自己的程序处理,尤其注意(301/302)重定向的url。

为什么是“锟斤拷”?

Unicode和老编码体系的转化过程中,有一些字用Unicode是没法表示的,Unicode官方用了一个占位符来表示这些文字,这就是:U+FFFD REPLACEMENT CHARACTER ,U+FFFD的UTF-8编码出来,恰好是 ‘\xef\xbf\xbd’。 如果这个’\xef\xbf\xbd’,重复多次,例如 ‘\xef\xbf\xbd\xef\xbf\xbd’,然后放到GBK/CP936/GB2312/GB18030的环境中显示,一个汉字2个字节,最终的结果就是:锟斤拷。

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注