QUrl setPath with the symbol '?'

  • Hi.
    When I use setPath("/Streaming/channels/1/picture?snapShotImageType=JPEG"), the output is a


    Symbol was replaced
    ? -> %3F

    I do not need it. I tried using QUrl::ParsingMode, but it did not help.
    How to leave this character?

  • Moderators


    I think it should be that way. Check out this and the corrsponding rfc , because it is the way as sent.

    In case you want to change it you can use QString::replace

  • @koahnig thanks, it's useful article.
    I have not found how to disable the conversion of characters, so I decided to create an address by QString.

  • Hi @Alexorleon,

    The %3F sequence was not replaced during parsing, but during presentation.


        QUrl url1(QLatin1Literal("http://admin@"));
        qDebug() << url1.path();
        qDebug() << url1.path(QUrl::FullyEncoded);
        qDebug() << url1.query();
        QUrl url2(QLatin1Literal("http://admin@"));
        qDebug() << url2.path();
        qDebug() << url2.path(QUrl::FullyEncoded);
        qDebug() << url2.query();

    The output is:


    Which is exactly what I'd expect (given that the default argument to QUrl::path is QUrl::FullyDecoded).


    Just adding an example that's a little closer to your original post:

        QUrl url("http://admin@");
        qDebug() << url.toString(QUrl::FullyEncoded);




  • @Paul-Colby
    "http://admin@" this is address of the IP-camera. It does not work with %3F.
    And if I use setPath, it changes the value automatically.

    I do this so:

    QString strUrl("http://admin@");
    QUrl url(strUrl);



    It is right for me.

  • @Alexorleon said in QUrl setPath with the symbol '?':

    http://admin@" this is address of the IP-camera. It does not work with %3F.

    Who, or what, tells you that's the "address of the IP-camera"?

    Typically web-based APIs would use a ? there, not %3F, since most API servers would be sending all requests to the same */picture endpoint, then passing the image type as an optional query parameter to that endpoint. This is convention only, the standards don't require it. But it does suggest that whoever / whatever told you that the URL contains a %3F was mistaken. Perhaps some poorly-translated-to-English manual?

    Indeed, it appears (just based on the URL format) that you are using a Hikvision device, and those, the snapShotImageType is a query parameter, so should be preceded by a ? or &, according to their user manuals (such as this one). So I think you have your input URL wrong to begin with.


  • @Paul-Colby

    This address was in the manual.
    Yes you are right. If I delete the "?snapShotImageType=JPEG" is still running.

    Thanks to all.

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.