Как я могу включить знак процента в QUrl

Я новичок в С++ с сегодняшнего дня, и мне тяжело.

У меня есть строка ниже:

const QUrl command("http://192.168.11.11/subdomain/letters?t=somekeyword&p=%01")

Но когда "команда" QUrl используется в QNetworkAccessManager, она фактически отправляется с добавлением 25 после знака %. Теперь я понимаю, что QUrl находится в TolerantMode и добавляет его, думая, что это ошибка пользовательского ввода.

Нежелательный результат:

http://192.168.11.11/subdomain/letters?t=somekeyword&p=%2501

Как я могу предотвратить изменение моего URL-адреса?

Я попытался удвоить знак процента и вставить обратную косую черту.

Любая помощь приветствуется. Спасибо.


person Carol    schedule 20.01.2014    source источник
comment
О какой версии QT здесь идет речь?   -  person ccozad    schedule 21.01.2014
comment
Кроме того, вы пытаетесь закодировать URL-адрес непечатаемого символа SOH, начало заголовка в URL-адресе выше? В противном случае %01 не имеет смысла.   -  person ccozad    schedule 21.01.2014
comment
Я использую QT в Blackberry SDK, насколько я понимаю, это QT4. Кроме того, это команда, отправленная на веб-сервер, %01 — питание включено, %00 — выключено.   -  person Carol    schedule 21.01.2014
comment
Qt 4.8.4, если быть точным   -  person Carol    schedule 22.01.2014


Ответы (1)


Это оказалось непростой проблемой. Вот решение, которое я придумал:

Код

QByteArray rawQuery("t=somekeyword&p=%01");
QUrl command("http://192.168.11.11/subdomain/letters");
command.setEncodedQuery(rawQuery);
std::cout << command.toEncoded().data();

Результат

http://192.168.11.11/subdomain/letters?t=somekeyword&p=%01

Примечания

Решение основано на некотором поведении, описанном в setEncodedQuery, в котором говорится

Задает строку запроса URL для запроса. Строка вставляется как есть, и при вызове toEncoded() дальнейшее кодирование не выполняется.

Эта функция полезна, если вам нужно передать строку запроса, которая не соответствует шаблону "ключ-значение" или использует схему кодирования специальных символов, отличную от предложенной QUrl.

Передача значения QByteArray() в запрос (нулевой QByteArray) полностью отменяет запрос. Однако передача значения QByteArray() установит для запроса пустое значение, как если бы в исходном URL-адресе был одиночный знак ?.

Ссылки

person ccozad    schedule 23.01.2014
comment
Это сработало отлично, спасибо за этот хорошо объясненный ответ! - person Carol; 28.01.2014