解决gsoap中文乱码的问题


解决方法一:

在main函数里初始化soap结构体后加入
    soap_set_mode(&soap,SOAP_C_UTFSTRING);

这样所有的C都是utf-8的格式,只要你的windows客户端支持UTF-8格式就没有了乱码问题

解决方法二:iconv库转码 

一般在ubuntu中都会预装iconv的库,使用也很简单,网上的教程很多..
下面的函数,在需要转码的地方调用即可
#include <iconv.h>
#ifdef ICONV_EN 
/*
   用户中文乱码问题,格式转换用!
ARG:
dest:目的格式
src:原格式
input:输入字符串
...*/

int conv_charset(const char *dest, const char *src, char *input, size_t ilen, char *output, size_t olen) {
        char **inbuf = &input;
        char **outbuf = &output;
        if(dest == NULL || src == NULL)
                return -1; 
        iconv_t conv = iconv_open(dest, src);
        if ( conv == (iconv_t) -1 )
                return -1; 
        memset(output, 0, olen);
        printf("dest=%s,src=%s,input=%s,output=%s,olen=%d\n",dest,src,*inbuf,*outbuf,olen);
        if ( iconv(conv, inbuf, &ilen, outbuf, &olen) )
                return -1; 
        printf("output=%s\n",output); //此处打印output为空,正常
        iconv_close(conv);
        return 0;
}
#endif


函数的使用,一般windows支持GBK和GB2312格式,现在的windows强制支持GB18030,转为这个格式很好的!
函数都是亲测可用的,给大家分享,一块进步...

int send_msg_xml(struct soap *soap,char *msg)
{
        struct Namespace *nsmap;
        nsmap = NULL;
        soap->encodingStyle = NULL;
        soap_set_omode(soap,SOAP_XML_TREE);
        soap->http_content = "text/xml";
        soap_set_namespaces(soap,nsmap);
        soap_begin_send(soap);
#ifdef ICONV_EN 
        char *buff/*[OUTPUT_LEN]={0}*/;
        //转码
        buff = (char *)malloc(OUTPUT_LEN);
        if(conv_charset("GBK","UTF-8",msg,(int)strlen(msg),buff,(int)OUTPUT_LEN) != 0)
        {   
#endif
                soap_serialize_string(soap, &msg);
                soap_put_string(soap, &msg, "RET_MSG", NULL);
#ifdef ICONV_EN     
        }else{
                soap_serialize_string(soap, &buff);
                soap_put_string(soap, &buff, "RET_MSG", NULL);
        }   
#endif
        soap_end_send(soap); // Clean up temporary data used by the serializer
        return SOAP_OK;


}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
gSOAP是一个用于开发基于SOAP(Simple Object Access Protocol)的Web服务的工具包。它最初是为C和C++开发的,但也提供了Python的绑定。 要在Python中使用gSOAP,您需要执行以下步骤: 1. 安装gSOAP:首先,您需要从gSOAP的官方网站下载并安装gSOAP工具包。根据您的操作系统,选择合适的版本进行安装。 2. 生成SOAP客户端和服务器代码:使用gSOAP工具包提供的命令行工具,根据您的Web服务定义(通常是使用WSDL描述的),生成相应的SOAP客户端和服务器代码。例如,可以使用`soapcpp2`命令生成C++代码,然后使用`wsdl2h`和`soapcpp2`命令生成C和C++代码。 3. 使用Python绑定:gSOAP提供了Python绑定,使您可以在Python中使用SOAP客户端和服务器。您可以使用`swig`工具为生成的C或C++代码生成Python绑定。然后,将生成的绑定文件编译为Python模块。 4. 开发和使用Python代码:一旦您完成了上述步骤,您就可以在Python中编写代码来使用gSOAP生成的SOAP客户端和服务器。您可以调用相应的函数来执行SOAP调用和处理返回结果。 需要注意的是,使用gSOAP进行Python开发需要一些额外的工作,并且涉及到多个步骤。因此,在决定使用gSOAP之前,建议先评估您的项目需求,以确定是否真正需要使用SOAP和gSOAP。在许多情况下,使用更简单的RESTful API或其他Web服务技术可能更加合适和方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值