美文网首页
utf8和Unicode转码的问题

utf8和Unicode转码的问题

作者: tysnd | 来源:发表于2019-01-20 19:36 被阅读0次

    最近在学习网络编程方面的东西,写了一个从网页抓取文本的程序,基于对话框的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中就是乱码。至于为什么不能用,我搞不清楚,不过找出这个解决方法花了我一晚上,所以遇到此类问题,不妨试一下第二种方法。
    我暂时就想到这两个较为明显的问题,也许是我没想到遇到的其他问题,如果想到,会更新文章。如果读者遇到其他问题,欢迎评论,共同进步。

    相关文章

      网友评论

          本文标题:utf8和Unicode转码的问题

          本文链接:https://www.haomeiwen.com/subject/pnrhjqtx.html