У меня есть строка, которая становится частью строки запроса URL и должна быть закодирована в URL.
QString queryStringParam = "J1mOEfg/TC";
Итак, я попытался использовать QUrl :: toPercentEncoding () как это
QString encodedQueryString = QUrl::toPercentEncoding(queryStringParam);
что приводит к "J1mOEfg%2FT"
но веб-сервис, который я звоню, ожидает "J1mOEfg%2fT"
[обратите внимание на строчную букву ‘f’ в кодировке от ‘/’ до ‘% 20f’] и, следовательно, отклоняет параметр. Это, вероятно, плохо со стороны службы, но я ничего не могу с этим поделать. Как получить шестнадцатеричные символы в нижнем регистре при сохранении регистра в остальной части параметра?
Я не думаю, что вы можете сделать это с помощью стандартных функций, но вы можете легко написать свои собственные. В строках, закодированных в процентах, специальные символы кодируются %
символ, за которым следует пара шестнадцатеричных цифр. Зная это, вы можете написать такую функцию:
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;
}
Других решений пока нет …