Qt,QUrl,QUrlQuery:在查询字符串中编码特殊字符

avi*_*iit 4 encoding qt urlencode urldecode query-string

我创建了一个这样的URL查询:

QString normalize(QString text)    
{    
    text.replace("%", "%25");    
    text.replace("@", "%40");    
    text.replace("‘", "%27");    
    text.replace("&", "%26");    
    text.replace("“", "%22");    
    text.replace("’", "%27");    
    text.replace(",", "%2C");    
    text.replace(" ", "%20");    

    return text;    
}    
QString key = "usermail";
QString value = "aemail@gmail.com";    
QUrlQuery qurlqr;    
qurlqr.addQueryItem(normalize(key), normalize(value));

QString result = qurlqr.toString();
Run Code Online (Sandbox Code Playgroud)

期待的结果是:

usermail=aemail%40gmail.com. 
Run Code Online (Sandbox Code Playgroud)

但我收到了:

usermail=aemail@gmail.com
Run Code Online (Sandbox Code Playgroud)

我不知道为什么.你能帮助我吗?

(我在Win7上使用Qt5)

Sam*_*Sam 5

默认情况下,QUrlQuery的toString解码百分比编码.如果您想要编码版本,请尝试:

qurlqr.toString(QUrl::FullyEncoded)

您也不需要通过替换字符来手动编码字符串; 你可以改用QUrl::toEncoded()(我建议你阅读QUrlQuery文档).

  • 但要小心,toEncoded将无法使用'+'符号. (3认同)