最近在学习网络编程方面的东西,写了一个从网页抓取文本的程序,基于对话框的mfc项目。项目使用Unicode编码方式。目前攻克了从utf8编码的网页上抓取中文内容而不出现乱码的难题。而对于gbk编码的网页,目前还没有进展,等解决了问题,会另写文章介绍。
这两天程序的思想和编写并没有太难的地方,但我仍然遇到了很多问题,就是因为搞不懂相关的转码方式,网上方法很多,但鲜有能解决问题的。现在终于解决了问题,我决定写这篇文章介绍一下经验,使有相关问题的读者省时省力。虽然很多原理我搞不懂,但相关做法可供参考。我使用的软件是vs2010。
主要问题有如下几点
使用HTTP协议的get请求获取网页源代码时,我是将抓取的源码存入CString。而将这个CString显示到listbox或编辑框时,中文字符会出现乱码。
解决方法:GetDlgItem(IDC_EDIT1)->SetWindowTextW(cstr);
注意,一定要使用SetWindowTextW,而不可以使用SetWindowText,由于Unicode编码是双字节,所以要用带W的函数。
Unicode下,CString和string的互相转化,有时转换结果是乱码
解决方法
CString转string
CString cs;
string str=CStringA(cs);
string转CString
不可用cs.Format("%s",str);
要用
USES_CONVERSION;
CString cs(str.c_str());
(若编译器在"%s"下画红线,则改成cs.Format(L"%s",str);)
用第一种方法,CString中就是乱码。至于为什么不能用,我搞不清楚,不过找出这个解决方法花了我一晚上,所以遇到此类问题,不妨试一下第二种方法。
我暂时就想到这两个较为明显的问题,也许是我没想到遇到的其他问题,如果想到,会更新文章。如果读者遇到其他问题,欢迎评论,共同进步。
网友评论