QT接收、读取服务器返回值(返回值含有汉字的问题)

本文详细介绍了如何使用QT+gSoap访问服务器并处理中文搜索结果,包括自定义服务器返回类型、编码转换及QT读取方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在用QT+gsoap访问服务器,我做的搜索功能,我传给服务器一个字符串(如:生活),服务器会返回给我一个std::wstring值,对于这个std::wstring是我自己定义的服务器返回类型,先说一下怎么自己定义返回值类型:

  首先,在用gsoap生成代码时候,先修改gsoap-2.8\gsoap\WS\typemap.dat的这个文件,自己添加代码是(xsd__string = | std::wstring ),这就自己定义了返回值类型了,前提是要生成gsoap的C++代码。

  其次,说一下为什么要定义返回值类型是std::wstring,因为返回来的东西有汉字,服务器编码是UTF8,在本地的编码不是这个,所以就需要去转换,在转换的时候std::wstring不会破坏中文,如果使用返回值类型是std::string就不会得到想要的汉字,

    会是乱码的,所以自己定义返回值类型很重要。

  最后,说一下怎么才能得到想要的汉字,分为接收和读取,接收一般人都能接收的到,就是读取的时候可能会遇到问题,下面说一下:

      接收:主要在接收的时候加上一个gsoap自动转换编码的东西。soap_set_mode(soap,SOAP_C_MBSTRING);//解析中英文字符

          就是这行代码,加上去吧。

      读取:读取的时候要把std::wstring转换成QT可以接收的类型,那就是QString了,那么怎么才能顺利的转换呢,这么做,

          std::wstring *stdstr=myseachresponse.SearchResult;这一句是接收服务器返回值

          QString filestr=QString::fromStdWString(*stdstr);这一句是转换用的,这样接下来就可以读取到xml了,怎么读取自己选择方式吧。熬了好长时间终于出来了,问题解决了,很高兴啊!!

转载于:https://www.cnblogs.com/quhongyue/archive/2013/03/21/2972510.html

### Qt 中 QSqlQuery 的返回值类型及处理方法 在 Qt 框架下,`QSqlQuery` 类用于执行 SQL 查询并获取结果。当调用 `exec()` 或其他执行查询的方法时,这些方法本身并不直接返回数据集;相反,它们返回一个布尔表示操作是否成功[^2]。 对于实际的数据检索,则通过以下几种方式实现: #### 1. 使用数索引访问列数据 可以直接利用 `value(int index)` 函数按列的位置来读取每一行中的特定字段。此方法适用于已知表格结构的情况。 ```cpp while (query.next()) { int id = query.value(0).toInt(); } ``` #### 2. 利用名称映射获取 如果更倾向于基于列名而非位置来进行引用的话,那么可以采用 `value(const QString &name)` 形式的重载版本。这种方式提高了代码的可维护性和清晰度。 ```cpp QString name; while (query.next()) { name = query.value("username").toString(); } ``` #### 3. 获取整行记录作为一个 QVariantMap 对象 有时可能希望一次性取得某一行的所有信息而不必逐个指定所需属性。这时就可以考虑使用 `record()` 结合遍历的方式完成这一目标。 ```cpp QVariantMap rowValues; while (query.next()) { const QSqlRecord rec = query.record(); for (int i=0;i<rec.count();++i){ rowValues.insert(rec.fieldName(i), query.value(i)); } } ``` 以上三种模式均能有效地解析来自数据库的结果集合,并将其转换成易于使用的 C++ 数据类型以便进一步加工或展示给用户界面组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值