首页 > 解决方案 > HTTP标头和数据响应,如何解码数据中的%?

问题描述

我正在从 Qt 5.15.2 应用程序生成 HTTP 响应,响应通常类似于:

HTTP/1.1 200 OK
Server: XMLMPAM
Access-Control-Allow-Origin: *
Date: Sun, 24 Jan 2021 07:56:45 GMT
Content-Length: 65
Connection: Closed
Content-Type: text/html; charset=utf-8

<!DOCTYPE html><html><body>{%22msgType%22:%22hb%22}</body></html>

这是产生这个的代码:

static const QString scstrLineTerm("\r\n");
QString strWrapper("<!DOCTYPE html><html><body>" + arybytData + "</body></html>")
       ,strDateTime(dtUTC.toString("ddd, dd MMM yyyy hh:mm:ss") + " GMT")
       ,strDataLength(QString::number(strWrapper.length()))
       ,strHTTP = QString("HTTP/1.1 200 OK%1"
                          "Server: XMLMPAM%2"
                          "Access-Control-Allow-Origin: *%3"
                          "Date: %4%5"
                          "Content-Length: %6%7"
                          "Connection: Closed%8"
                          "Content-Type: text/html; charset=utf-8%9"
                          "%10%11"
                          "%12").arg(scstrLineTerm
                                    ,scstrLineTerm
                                    ,scstrLineTerm
                                    ,strDateTime, scstrLineTerm
                                    ,strDataLength, scstrLineTerm
                                    ,scstrLineTerm
                                    ,scstrLineTerm
                                    ,scstrLineTerm, scstrLineTerm
                                    ,strWrapper);

这是响应中来自浏览器的 URL:

http://localhost:8123/?{%22msgType%22:%22hb%22}

浏览器得到响应:

{%22msgType%22:%22hb%22}

我想要的是没有转义码的响应,所以它看起来像:

{"msgType":"hb"}

标签: c++qthttp

解决方案


解决了:

QString strWrapper("<!DOCTYPE html><html><body>" + QUrl::fromPercentEncoding(arybytData) + "</body></html>")
       ,strDateTime(dtUTC.toString("ddd, dd MMM yyyy hh:mm:ss") + " GMT")
       ,strDataLength(QString::number(strWrapper.length()))
       ,strHTTP;
strHTTP = QString("HTTP/1.1 200 OK%1"
                  "Server: XMLMPAM%2"
                  "Access-Control-Allow-Origin: *%3"
                  "Date: %4%5"
                  "Content-Length: %6%7"
                  "Connection: Closed%8"
                  "Content-Type: text/html; charset=utf-8%9"
                  "%10%11"
                  "%12").arg(scstrLineTerm
                            ,scstrLineTerm
                            ,scstrLineTerm
                            ,strDateTime, scstrLineTerm
                            ,strDataLength, scstrLineTerm
                            ,scstrLineTerm
                            ,scstrLineTerm
                            ,scstrLineTerm, scstrLineTerm
                            ,strWrapper);

回复:

{"msgType":"hb"}

推荐阅读