gsoap客户端有中文发送给服务器,服务器能正常解析,但是服务器中返回的字符串中有中文,客户端显示为乱码,即使代码中初始化soap时用了语句:soap_set_mode(&clientSoap, SOAP_C_MBSTRING); 也一样乱码。
原因为gsoap生成头文件时使用的字符串为std::string, 改为std::wstring或者wchar_t* 则能正常显示中文。修改方法如下:
1.在生成webservice头文件时,先新建文件mytypemap.dat,内容为:
xsd__string = | std::wstring | wchar_t*
2.然后用命令生成头文件时,使用如下命令:
> wsdl2h -o UploadInfoWebService.h -t mytypemap.dat http://10.252.252.244:8080/grgbackmanager/ws/aio?wsdl
即加上-t mytypemap.data 这个,则在gsoap生成的.h文件中可以看到,std::string已经改为wchar_t*类型了,
后面继续用命令生成相应的文件: soapcpp2 UploadInfoWebService.h
然后调用相应的接口时,改为使用wchar_t* 或者std::wstring,则在接收到中文字符串后,能够正常显示中文,不再乱码。