Konvertieren QUrl mit percent-encoding in string

Ich eine URL verwenden, die durch den Benutzer eingegeben werden, als text zum initialisieren einer QUrl Objekt. Später will ich wandeln die QUrl zurück in einen string für die Ausgabe zu prüfen und es mit regular expression. Dies funktioniert gut, solange der Benutzer nicht geben Sie einen beliebigen Prozent-codierte URLs.

Nicht warum der folgende Beispiel-code funktioniert?

qDebug() << QUrl("http://test.com/query?q=%2B%2Be%3Axyz%2Fen").toDisplayString(QUrl::FullyDecoded); 

Es einfach nicht decodieren jeder der Prozent-codierten Zeichen. Es sollte drucken "http://test.com/query?q=++e:xyz/en" aber es tatsächlich druckt "http://test.com/query?q=%2B%2Be%3Axyz%2Fen".

Ich habe auch versucht, eine Menge von anderen Methoden wie fromUserInput (), aber ich konnte nicht machen den code korrekt in Qt5.3.

Kann jemand mir erklären, wie Sie dies tun und warum der obige code funktioniert nicht (d.h. zeigt die dekodierten URL), auch wenn mit QUrl::FullyDecoded?

UPDATE

Nachdem ich die fromPercentEncoding () - Hinweis, ich habe versucht folgenden code:

QUrl UrlFromUserInput(const QString& input)
{
   QByteArray latin = input.toLatin1();
   QByteArray utf8 = input.toUtf8();
   if (latin != utf8)
   {
      //URL string containing unicode characters (no percent encoding expected)
      return QUrl::fromUserInput(input);
   }
   else
   {
      //URL string containing ASCII characters only (assume possible %-encoding)
      return QUrl::fromUserInput(QUrl::fromPercentEncoding(input.toLatin1()));
   }
}

Dies ermöglicht dem Benutzer die Eingabe von unicode-URLs und Prozent-kodiert URLs und es möglich ist, zu Dekodieren, die beide Arten von URLs für die Anzeige/das matching. Aber die Prozent-codierte URLs funktionierte nicht in QWebView... der web-server reagiert anders (ist es wieder eine andere Seite). So offensichtlich QUrl::fromPercentEncoding() ist keine saubere Lösung, da es effektiv ändert sich die URL. Ich konnte erzeugen zwei QUrl Objekte in der oben genannten Funktion... man wurde direkt, man konstruiert mit fromPercentEncoding(), mit der ersten für QWebView und letzteres für die Anzeige/matching nur... aber das scheint absurd.

  • Was meinst du, "warum geht es nicht"? Was erwarten Sie, es zu drucken?
  • Ähnliche Frage - stackoverflow.com/questions/4815418/...
  • Wenn Sie nicht finden können, hier eine Lösung, einfach eine E-Mail auf das Interesse @ qt-project.org mailing-Liste. QUrl maintaners sind extrem aktiv.
InformationsquelleAutor Silicomancer | 2014-06-21
Schreibe einen Kommentar