c++ 使用 gsoap 调用 WebService 中文乱码

c++ 使用 gsoap 调用  WebService 中文乱码
 
问题产生:

       使用gsoap时,如果WebService服务端及客户调用端都使用 C++ , 再传递中文时不会存在乱码问题,

       当客户端为 C++ ,WebService服务端使用Java、domino,传递中文则会有乱码问题。

产生原因:

       宽字符的原因

 

解决办法(一):

    在程序中首先设置本地代码页

    vista 操作系统: 

          setlocal(LC_ALL,"Chinese");

          soap_set_mode(soap,SOAP_C_MBSTRING);

    windowsxp 操作系统:

          setlocal(LC_ALL,"chs");

          soap_set_mode(soap,SOAP_C_MBSTRING);

 

解决方法(二)

    1. 使用 wsdl2h.exe 通过wsdl描述文件创建C++头文件(test.h);

    2. 将头文件(test.h)中 std:string* 使用wchar_t* 替换;

    3. 使用 soapcpp2.exe -i test.h ,生成相关的cpp及h文件

    4. 使用 C++ 时,需要将接收的wchar_t类型数据转换为char, 使用WideCharToMultiByte函数   

后续:

    soap在对字符编码转换时,调用 wctomb 函数,该函数的调用在 stdcoap2.cpp 文件中,代码调试跟踪至此,查看 该函数的返回值是否正确,-1表示字符集设置不正确。

posted @ 2013-09-25 09:48  预见者  阅读(1486)  评论(0编辑  收藏  举报