QT接收、读取服务器返回值(返回值含有汉字的问题)

最近在用QT+gsoap访问服务器,我做的搜索功能,我传给服务器一个字符串(如:生活),服务器会返回给我一个std::wstring值,对于这个std::wstring是我自己定义的服务器返回类型,先说一下怎么自己定义返回值类型:

  首先,在用gsoap生成代码时候,先修改gsoap-2.8\gsoap\WS\typemap.dat的这个文件,自己添加代码是(xsd__string = | std::wstring ),这就自己定义了返回值类型了,前提是要生成gsoap的C++代码。

  其次,说一下为什么要定义返回值类型是std::wstring,因为返回来的东西有汉字,服务器编码是UTF8,在本地的编码不是这个,所以就需要去转换,在转换的时候std::wstring不会破坏中文,如果使用返回值类型是std::string就不会得到想要的汉字,

    会是乱码的,所以自己定义返回值类型很重要。

  最后,说一下怎么才能得到想要的汉字,分为接收和读取,接收一般人都能接收的到,就是读取的时候可能会遇到问题,下面说一下:

      接收:主要在接收的时候加上一个gsoap自动转换编码的东西。soap_set_mode(soap,SOAP_C_MBSTRING);//解析中英文字符

          就是这行代码,加上去吧。

      读取:读取的时候要把std::wstring转换成QT可以接收的类型,那就是QString了,那么怎么才能顺利的转换呢,这么做,

          std::wstring *stdstr=myseachresponse.SearchResult;这一句是接收服务器返回值

          QString filestr=QString::fromStdWString(*stdstr);这一句是转换用的,这样接下来就可以读取到xml了,怎么读取自己选择方式吧。熬了好长时间终于出来了,问题解决了,很高兴啊!!

posted on 2013-03-21 08:43  Q11三工鸟yue  阅读(800)  评论(0编辑  收藏  举报