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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 倒立摆及其应用//2021-2-23[通俗易懂]

    倒立摆及其应用//2021-2-23[通俗易懂]前言:以前搞电赛的时候搞过Pid平衡小车,倒立摆基本实现方法与平衡小车差不多,有一次刚院跑到实验室唠嗑,问你知不知道倒立摆的应用?我说不知道,他说航天火箭····,你们的这些常识太少了,落下这句话就走了,故为了解这些常识,有此小文。正文:一、倒立摆(invertedpendulum)1.概述倒立摆,InvertedPendulum,是典型的多变量、高阶次(有些还分几阶倒立摆【PID中涉及角度还有角速度这样来看多变量高阶层就不难理解了】),非线性、强耦合、自然不稳定系统。倒…

    2022年8月18日
    6
  • soapUI工具使用方法、简介、接口测试[通俗易懂]

    soapUI工具使用方法、简介、接口测试[通俗易懂]一、soapUI简介SOAP:   WebService通过Http协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息头的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用WebService。 SOAP协议 =HTTP协议 +XML数

    2022年6月17日
    45
  • 2021年超全中高级Java工程师面试题+答案「建议收藏」

    2021年超全中高级Java工程师面试题+答案「建议收藏」java缓存技术面试题1、memcache的分布式原理  memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。每个服务器都是完全独立和隔离的服务。memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。  2、memcache的内存分配机制  如何存放数据到memcached缓存中?(memcache内存分配机制)  SlabAllocator内存分配机制:预先将内存分配成数个slab仓库,

    2022年5月5日
    47
  • Word2vec负采样

    Word2vec负采样下文中的模型都是以Skip-gram模型为主。1、论文发展word2vec中的负采样(NEG)最初由Mikolov在论文《DistributedRepresentationsofWordsandPhrasesandtheirCompositionality》中首次提出来,是Noise-ContrastiveEstimation(简写NCE,噪声对比估计)的简化版本…

    2022年6月20日
    41
  • js实现input的赋值

    js实现input的赋值

    2021年11月8日
    34
  • 最长上升子序列 LIS算法实现[通俗易懂]

    最长上升子序列 LIS算法实现[通俗易懂]最长上升子序列LIS算法实现LIS(LongestIncreasingSubsequence)最长上升(不下降)子序列有两种算法复杂度为O(n*logn)和O(n^2)。在上述算法中,若使用朴素的顺序查找在D1..Dlen查找,由于共有O(n)个元素需要计算,每次计算时的复杂度是O(n),则整个算法的时间复杂度为O(n^2),与原来算法相比没有任何进步。但是由于D的特点(2),在D中查…

    2022年6月5日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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