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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows tasklist不能用

    windows tasklist不能用我的方法是在cmd下切换到C:\Windows\System32目录下,然后再tasklist

    2022年5月3日
    47
  • css3实现遮罩层_div遮罩层

    css3实现遮罩层_div遮罩层JS+CSS简单实现DIV遮罩层显示隐藏

    2022年4月21日
    63
  • mysql建表语句 numeric_数据库建表语句[通俗易懂]

    mysql建表语句 numeric_数据库建表语句[通俗易懂]展开全部CREATETABLE语句,用32313133353236313431303231363533e78988e69d8331333433616139于在数据库中创建新表。语法:CREATETABLEtable(field1type[(size)][NOTNULL][index1][,field2type[(size)][NOTNULL][index2][,…

    2025年10月5日
    4
  • 数据库中间件简介_数据库中间件还用吗

    数据库中间件简介_数据库中间件还用吗数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表,主流的设计方案主要有两种:1、服务端代理:需要独立部署一个代理服务,该代理服务后面管理多个数据库实例,在应用中通过一个数据源与该代理服务器建立连接,由该代理去操作底层数据库,并返回相应结果。优点是支持多语言,对业务透明,缺点是实现复杂,实现难度大,同时代理需要确保自身高可用2、客户端代理:在连接池或数据库驱动上进行一层封装,内部与不同的数据库建立连接,并对SQL…

    2025年8月5日
    6
  • Jetson TX1 硬件配置概览[通俗易懂]

    Jetson TX1 硬件配置概览[通俗易懂]GPIO、I2C、I2S、SPI、带流控制的TTL UART等接口  丰富的接口给了今后基于Jetson TX1进行扩展开发的无限可能,即可以通过TTL UART、GPIO等接口实现其它单片机、嵌入式系统的所有功能外,还能通过自身强大的性能,升任其它单片机、嵌入式系统,如树梅派等无力支撑的高数据密度业务和高处理实时性业务,如智能机器人,机器人,无人驾驶汽车等。摄像头扩展头 

    2022年6月15日
    47
  • Java list转set;JDK8 下list 集合转Set 集合

    Java list转set;JDK8 下list 集合转Set 集合**List集合转Set集合**List集合和Set集合的区别在说如何List集合转Set集合之前我们先回顾一下List集合和Set集合的区别。他们之间比较细致的区别有蛮多的,不过比较粗糙地来说List和Set之间的区别有以下那么几点(1)llist和…

    2022年6月21日
    132

发表回复

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

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