gsoap中文乱码问题

来源:互联网 发布:acr软件下载 编辑:程序博客网 时间:2024/04/24 18:02

        最近项目中采用了gsoap调用WebService接口,想着测试输出看下接口返回的数据是否正确,却遇到了些问题。

        一开始gsoap中调用接口返回的数据是char**类型,于是就写了如下代码输出查看:

        int soapResult = proxy.getUserSystem(&reqGetUs, &rspGetUs);
        if (soapResult==SOAP_OK)
        {
               cout<<"调用成功!"<<endl;

               char **chResult= rspGetUs.return_;
               for (int i=0;i<rspGetUs.__sizereturn_;i++)
               {

                     cout<<chResult[i]<<endl;

                }
        }

        结果是:如果是数字或字符串则输出正确,如果含有中文则输出的是乱码

        于是查找原因与解决方案,原因是我的项目采用的是UNICODE字符集,而从接口传输过来的数据采用的是多字节字符集,从而编码不匹配导致输出乱码。找到的一种解决方案是修改typemap.dat文件(生成gsoap调用代码时-t指定的文件),该文件是用于指定soap/xml中的数据类型与C/C++中的数据类型间的转换规则的,修改方法为打开该文件,在最后一行加上如下这条语句:

        xsd__string = | wchar_t* | std::wstring

        这样soap/xml中的string类型将被转换为wchar_t*或std::wstring类型,从而更好的支持中文。另外为了确保Proxy类用UTF8编解码,可在其构造函数中强行赋值编码方式,如:ConsoleWinServiceImplServiceSoapBindingProxy proxy(SOAP_C_UTFSTRING)


打发发的