On quarta-feira, 14 de agosto de 2013 05:30:44, Richard Turner wrote: > Just one more question: could you elaborate on the idea that calling the > QUrl constructor taking a QString is a big no-no in Qt 4 code, but not > in Qt 5?
The problem is that the QUrl constructor in Qt 4 takes a fully-decoded URL, which is a broken concept. Fully-decoded URLs don't exist because you *need* the percents in some cases to make distinctions. For example, the two URIs are not equivalent (as you've found out): http%3A%2F%2Fexample.com http://example.com URIs (and URLs, which are a subset of URIs) only truly exist in percent- encoded forms so that the two above forms can be distinguished from one another. But the QUrl constructor in Qt 4 assumes that all URLs are in fully decoded form. Then when you do: QUrl url("http%3A%2F%2Fexample.com") qDebug() << url.toEncoded(); because QUrl::toEncoded is the form you'd pass to other applications, you'll get: "http%253A%252F%252Fexample.com" Which is a third URL, different from the other two above! PS: I've just found a bug with this URL in Qt 5.[01]: QUrl url("http%3A%2F%2Fexample.com"); qDebug() << url.path(); // prints "http:%2F%2Fexample.com" qDebug() << url.isValid(); // prints false qDebug() << url.toEncoded(); // prints "" There's a special error condition in URLs that QUrl in Qt 5 recognises: path contains a colon before the first slash. However, your URL does *not* contain a colon before the first slash, it contains a %3A and that's not the same thing. This is fixed in Qt 5.2 and I've just submitted a new unit test to prove it: https://codereview.qt-project.org/62946 -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest