c++、webServices、gsoap、tinyxml、iconv

c++、webServices、gsoap、tinyxml、iconv

大家好,又见面了,我是全栈君。

  背景解释。编程语言c++,实际项目上会用MFC,数据下载方式为gsoap,拉下来的数据类型为string,用tinyxml对拉下来的string类型进行解析,其中的中文字符都是乱码,用iconv来解码(from utf-8 to GBK)。

//main.cpp

 1 #include "AppServiceSoap.nsmap"
 2 #include "soapAppServiceSoapProxy.h"
 3 #include "iconv.h" 
 4 #include "tinystr.h"  
 5 #include "tinyxml.h"
 6 
 7 using namespace std;
 8 
 9 #define OUTPUT_LEN 2048
10 #define FIELD_LEN 16  
11 
12 int conv_charset(const char *dest, const char *src, char *input, size_t ilen, char *output, size_t olen)
13 {
14     iconv_t conv = iconv_open(dest, src);
15     if (conv == (iconv_t)-1)
16         return -1;
17     memset(output, 0, olen);
18 
19     if (iconv(conv, (const char **)&input, &ilen, &output, &olen))
20         return -1;
21     iconv_close(conv);
22     return 0;
23 }
24 
25 int main()
26 {
27     AppServiceSoapProxy webservice;
28     soap_init(webservice.soap);
29     soap_set_mode(webservice.soap, SOAP_C_UTFSTRING);
30 
31     _WS1__SampleDataByBarCodeNoXML request = _WS1__SampleDataByBarCodeNoXML();
32     string tmp = "18010354204";
33     request.sSampleBarCodeNo = &tmp;
34 
35     _WS1__SampleDataByBarCodeNoXMLResponse response = _WS1__SampleDataByBarCodeNoXMLResponse();
36 
37     char *endpoint = NULL;
38 
39     int result = webservice.SampleDataByBarCodeNoXML(&request, response);
40     
41     if (SOAP_OK == result)
42     {
43         //int element_counter = response.SampleDataByBarCodeNoXMLResult->__sizestring;
44         cout << *response.SampleDataByBarCodeNoXMLResult <<endl;
45         cout << "--------------------开始解码--------------------" << endl;
46         
47         TiXmlDocument* myDocument = new TiXmlDocument();
48         myDocument->Parse((*(response.SampleDataByBarCodeNoXMLResult)).c_str(), 0, TIXML_ENCODING_UTF8);
49         TiXmlElement* rootElement = myDocument->RootElement();
50         TiXmlElement* studentsElement = rootElement->FirstChildElement();
51         studentsElement = studentsElement->FirstChildElement();
52     
53         while (studentsElement)
54         {
55             cout << studentsElement->Value() << ":";
56 
57             if (studentsElement->GetText())
58             {
59                 int ilen = strlen(studentsElement->GetText());
60                 int olen = ilen * 2;
61                 char *output = (char *)malloc(sizeof(char) * olen);
62                 char* input = nullptr;                       //初始化char*类型
63 
64                 input = const_cast<char*>(studentsElement->GetText());           //const char*类型转char*类型
65 
66                 conv_charset("GBK", "UTF-8", input, ilen, output, olen);
67                 cout << output << endl;
68             }
69             else
70             {
71                 cout << "(此项无内容)" << endl;
72             }
73 
74             studentsElement->utf8ByteTable;
75 
76             //迭代下一个
77             studentsElement = studentsElement->NextSiblingElement();
78         }
79     }
80     //结束了
81     soap_destroy(webservice.soap);
82     soap_end(webservice.soap);
83     soap_done(webservice.soap);
84 
85     cout << "---------------------finish-----------------------" << endl;
86     cin.get();
87     return 0;
88 }

项目的目录结构。

c++、webServices、gsoap、tinyxml、iconv

主要分成3部分。

1、gsoap。

先做soap,这个参考上一篇。

2、tinyxml。

这个比较简单。

3、iconv.h,iconv.lib

这个好难。我都是用别人编译好的。

参考:https://www.cnblogs.com/tangxin-blog/p/5608751.html。

转载于:https://www.cnblogs.com/wuzhenyang/p/8523740.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/107671.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • android的适配器作用,适配器在Android中的作用是什么?

    android的适配器作用,适配器在Android中的作用是什么?适配器在Android中的作用是什么?我想知道在Android环境中何时,何地以及如何使用适配器。来自Android开发者文档的信息对我来说不够,我希望得到更详细的分析。11个解决方案39votesAndroid中的适配器基本上是UI组件和将数据填充到UI组件的数据源之间的桥梁例如,通过使用数据源数组中的列表适配器来填充列表(UI组件)。success_anilanswered2019-06…

  • APAP INCLUDE「建议收藏」

    APAP INCLUDE「建议收藏」*&———————————————————————**&ReportYMWXBINCLUDE*&*&———————————————————————**&…

  • mysql opkg源_opkg包管理工具常用命令[通俗易懂]

    mysql opkg源_opkg包管理工具常用命令[通俗易懂]Opkg是一个轻量快速的套件管理系统,目前已成为Opensource界嵌入式系统标准。常用于路由、交换机等嵌入式设备中,用来管理软件包的安装升级与下载。常用命令opkgupdate更新可以获取的软件包列表opkgupgrade对已经安装的软件包升级opkglist获取软件列表opkginstall安装指定的软件包opkgremove卸载已经安装的指定的软件包安装要安装软件…

  • checkbox选中和不选中 jqu_jquery checkbox 选中不选中

    checkbox选中和不选中 jqu_jquery checkbox 选中不选中展开全部$(function(){//动态绑定默认状态//$(“#ck”).attr(“checked”,true)//选中//$(“#ck”).attr(“checked”,false)//未选中//点击判断选中还是未选中$(“#ck”).click(function(){if($(this).is(“:checked”)){alert(“选中”);}else{alert…

  • php二维码分享到朋友圈,php实现的微信分享到朋友圈并记录分享次数功能

    php二维码分享到朋友圈,php实现的微信分享到朋友圈并记录分享次数功能本文实例讲述了php实现的微信分享到朋友圈并记录分享次数功能。分享给大家供大家参考,具体如下:1.引入JS文件2.通过config接口注入权限验证配置3.通过ready接口处理成功验证4.通过error接口处理失败验证JSDK档说明:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html(1)(2)页面加入获取we…

  • 网络信息安全——访问控制「建议收藏」

    网络信息安全——访问控制「建议收藏」**访问控制**访问控制是给出一套方法,将系统中的所有功能标识出来,组织起来,托管起来,将所有的数据组织起来标识出来托管起来,然后提供一个简单的唯一的接口,这个接口的一端是应用系统一端是权限引擎。权限引擎所回答的只是:谁是否对某资源具有实施某个动作(运动、计算)的权限。返回的结果只有:有、没有、权限引擎异常了。访问控制是几乎所有系统(包括计算机系统和非计算机系统)都需要用到的一种技术。访问控制是按用户身份及其所归属的某项定义组来限制用户对某些信息项的访问,或限制对某些控制功能的使用的一种技术。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号