Russian Qt Forum
Октябрь 01, 2024, 12:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Автоматическое преобразование %2B в %252B  (Прочитано 6037 раз)
thechicho
Гость
« : Июнь 11, 2013, 15:51 »

нужно выполнить запрос на
http://www.blabla.ru/?blabla%2Bblabla

задаю так
request.setUrl(QUrl("http://www.blabla.ru/?blabla%2Bblabla"));

по сниферу видно, что
%2B автоматически кодируется в %252B
вопрос: где происходит это кодирование и возможно ли его оключить?

или

%2B - это символ +
если задать урл http://www.blabla.ru/?blabla+blabla
то ничего не кодируется, а так и передается. хотя в данном случае мне нужно, чтобы прошло кодирование + в %2B
Записан
mutineer
Гость
« Ответ #1 : Июнь 11, 2013, 15:54 »

QUrl::toPercentEncoding подойдет?
Записан
thechicho
Гость
« Ответ #2 : Июнь 11, 2013, 16:03 »

вот похожая проблема
http://www.qtcentre.org/threads/54183-QNetworkAccessManager-strange-problem-and-behavior

только мне нужно, чтобы именно %2B отправлялось в итоговом запросе

//QUrl::toPercentEncoding
нет, это QNetworkAccessManager как-то автоматически кодирует %2B в %252B
что нужно отключить, либо включить кодирование + в %2B
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #3 : Июнь 11, 2013, 16:58 »

request.setUrl(QUrl::toPercentEncoding("http://www.blabla.ru/?blabla+blabla"));
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
thechicho
Гость
« Ответ #4 : Июнь 11, 2013, 17:13 »

QByteArray QUrl::toPercentEncoding ( const QString & input, const QByteArray & exclude = QByteArray(), const QByteArray & include = QByteArray() ) [static]
void QNetworkRequest::setUrl ( const QUrl & url )

но это неважно. важно то, что % автоматически кодируется в %25
и из %2B получается %252B

это на уровне исходников происходит? (типа баг)
или все-таки как-то можно повлиять на это преобразование?
Записан
Serr500
Гость
« Ответ #5 : Июнь 11, 2013, 19:07 »

Вставьте вместо "%2B" символ "+" и передайте строку в QUrl.
Записан
thechicho
Гость
« Ответ #6 : Июнь 11, 2013, 19:13 »

Цитировать
если задать урл http://www.blabla.ru/?blabla+blabla
то ничего не кодируется, а так и передается. хотя в данном случае мне нужно, чтобы прошло кодирование + в %2B
Записан
thechicho
Гость
« Ответ #7 : Июнь 11, 2013, 19:17 »

http://lists.qt.nokia.com/public/qt-interest/2008-December/000569.html
Записан
thechicho
Гость
« Ответ #8 : Июнь 11, 2013, 22:48 »

в общем в 4 Qt баг с QUrl.
в чем именно он заключается я хз, но если
делать так
QString urlString = "http://www.blabla.ru/?blabla+blabla";
request.setUrl(QUrl(urlString));
то сервер сообщает об ошибке

если так
request.setUrl(QUrl::fromEncoded(urlString.replace("+", "%2B").toUtf8()));
то сервер отдает нужный контент.

помог разобраться thiago с irq FreeNode, Europe канал #qt (походу этот чувак https://www.google.ru/search?q=Thiago+Macieira)
посоветовал переходить на qt5, мол там QUrl без багов и работает быстрее)

заходите тоже, можно будет на русском поообщаться)
http://qt-project.org/wiki/OnlineCommunities

можно через оперу зайти irc:
ищите FreeNode, Europe комнату qt
Записан
thechicho
Гость
« Ответ #9 : Июнь 12, 2013, 14:32 »

может кому интересно будет
Код:
QString urlString = "http://www.blabla.ru/?blabla%2Bblabla";
QUrl urlTest1(urlString);
qDebug() << endl << "urlTest1" << urlTest1;
qDebug() << "urlTest1.toEncoded()" << urlTest1.toEncoded();

QUrl urlTest2 = QUrl::fromEncoded(urlString.toUtf8());
qDebug() << endl << "urlTest2" << urlTest2;
qDebug() << "urlTest2.toEncoded()" << urlTest2.toEncoded();

urlTest1  QUrl( "http://www.blabla.ru/?blabla%2Bblabla" )  
urlTest1.toEncoded() "http://www.blabla.ru/?blabla%252Bblabla"

urlTest2  QUrl( "http://www.blabla.ru/?blabla+blabla" )  
urlTest2.toEncoded() "http://www.blabla.ru/?blabla%2Bblabla"
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.