3

我有一个字符串成为 url 的查询字符串部分,并且必须进行 url 编码。

QString queryStringParam = "J1mOEfg/TC";

所以,我尝试像这样使用QUrl::toPercentEncoding()

QString encodedQueryString = QUrl::toPercentEncoding(queryStringParam);

这导致"J1mOEfg%2FT"但我正在调用的 web 服务期望"J1mOEfg%2fT"[注意在 '/' 到 '%20f' 的编码中的小写 'f'] 并因此拒绝该参数。服务方面可能很糟糕,但我对此无能为力。如何在保持参数其余部分的大小写的同时获得小写编码十六进制字符?

4

1 回答 1

2

我不认为你可以用标准函数来做到这一点,但你可以很容易地编写自己的。在百分比编码的字符串中,特殊字符用一个%符号编码,后跟一对十六进制数字。知道了这一点,您可以编写如下函数:

QString lowerPercentEncoding( QString str )
{
    int index = str.indexOf("%");
    while( index != -1 )
    {
        QString tmp = str.mid(index, 3);
        str.replace(index,3,tmp.toLower());
        index = str.indexOf("%", index + 1);
    }
    return str;
}
于 2012-09-25T05:36:06.257 回答