2014-01-20 2 views
1

Я новичок в C++ с сегодняшнего дня, и мне тяжело.Как включить знак процента в QUrl

У меня есть ниже линии:

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

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

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

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

Как предотвратить мой URL должен быть изменен?

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

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

+0

Какую версию QT мы говорим здесь? – ccozad

+0

Кроме того, пытаетесь ли вы URL-кодировать непечатаемый символ «SOH, начало заголовка» в указанном выше URL-адресе? В противном случае% 01 не имеет никакого смысла. – ccozad

+0

Я использую QT в SDK Blackberry, и, насколько я понимаю, QT4 Кроме того, это команда, отправленная на веб-сервер,% 01 включен,% 00 отключен от сети – Carol

ответ

2

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

кодекса

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-адрес имел одиночный «?».

Ссылки

+1

Это сработало отлично, спасибо за этот хорошо объясненный ответ! – Carol

Смежные вопросы