Qt: QUrl::fromUserInput неправильно интерпретирует URL-адрес FTP

У меня возникла проблема с передачей строки FTP в QUrl:

std::cout << QUrl::fromUserInput("ftp://[email protected]:password@ftphost:21/path/file.ext").toString().toStdString().c_str() << std::endl;

Всегда приводит к

http://ftp//[email protected]:password@ftphost:21/path/file.ext

что явно неправильно. В чем проблема с указанным выше URL-адресом FTP? Или это известная проблема в Qt4?

Я работаю в Linux, используя Qt 4.8.1.

Даже следующий код

if(QUrl("ftp://[email protected]:password@ftphost:21/path/file.ext").isValid())
    std::cout << "is valid" << std::endl;
else
    std::cout << "is not valid" << std::endl;

В результате получается "недействительно"

заранее спасибо


person sarahara    schedule 23.07.2014    source источник


Ответы (1)


Вам нужно вручную заменить @ в имени пользователя на %40. Это то, что QUrl делает внутри, если QUrl::setUserName() вызывается с [email protected].

person Oleg Shparber    schedule 23.07.2014
comment
Спасибо Олег за подсказку! С вашей помощью мне удалось решить проблему, однако при использовании Qt4 аутентификация не будет выполнена из-за ошибки %40. Я просто делаю хак, чтобы решить эту проблему: finalUrl.setUserName(QUrl::fromEncoded(finalUrl.userName().toLatin1()).toString()); С передачей %40 в QUrl и этим небольшим исправлением все работает нормально. Даже на Qt4. Спасибо еще раз - person sarahara; 25.07.2014
comment
@sarahara Если вы найдете мой ответ правильным, то примите его :) Спасибо. - person Oleg Shparber; 26.07.2014