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了,怎么读取自己选择方式吧。熬了好长时间终于出来了,问题解决了,很高兴啊!!