Qt不编码'+'符号

Mik*_*ike 6 encoding qt

为什么没有Qt5编码加号到%2B?

我试过这段代码:

QUrlQuery urlQuery;
urlQuery.addQueryItem("test", "hello+world");
manager->post(request, urlQuery.toString(QUrl::FullyEncoded).toUtf8());
Run Code Online (Sandbox Code Playgroud)

但在服务器端,我总是得到如下字符串:

hello world

没有%2B且没有加号.所以我无法在服务器端获得"+"标志......

如何使用Qt5发送加号?

Ily*_*lya 5

如何使用Qt5发送加号?

不要使用URL作为post数据,使用a QByteArray.它将按原样发送.

编辑

附加信息QUrlQuery,+符号是一个特例(来自doc):

处理空格和加号("+")

Web浏览器通常将HTML FORM元素中的空格编码为加号("+"),并将符号编码为百分比编码形式(%2B).但是,管理URL的Internet规范不考虑空格和等效的加号字符.因此,QUrlQuery从不将空格字符编码为"+",并且永远不会将"+"解码为空格字符.相反,空格字符将以编码形式呈现为"%20".为了支持类似于HTML表单的编码,QUrlQuery也从不将"%2B"序列解码为加号,也不编码加号.事实上,在键,值或查询字符串中找到的任何"%2B"或"+"序列都与写入完全相同(除了"%2b"的大写字母到"%2B").

因此,如果你想使用QUrlQuery包含+符号的字符串,你似乎必须自己编码("+"=> "%2B"),你可以使用静态方法QUrl::toPercentEncoding().