我们的应用程序是一个32位应用程序。当它安装在64位Windows7中时,通常安装在“C:\Program Files (X86)”,而不是“C:\Program Files”。我们根据安装位置构造一个Url,并将其作为web服务的一部分进行传递。我们像这样构造Url:
ppmPath = "http://" + ipAddress + ":13007/" + folder + ".ppm" + "?filePath="
+ applicationDirPath + "/" + FIRMWARE;
QUrl ppmURL( ppmPath, QUrl::TolerantMode );
ppmPath = QString( ppmURL.toEncoded() );变量的类型和含义是常见的。
由于Windows764位的“applicationDirPath”包含一个右方括号“)”--在“(X86)”子串中--显然网址已损坏。如果我们将它安装到任何其他位置,即使该位置有任何其他特殊字符,它也可以完美地工作。
如何处理URL中的“)”字符,使之不被破坏?
发布于 2012-11-14 06:35:54
在the documentation中,即使在容忍模式下,括号看起来也不像是由QUrl自动编码的。如果您首先在QString中包装您的网址,然后将所有(字符替换为"%28“,并将所有)字符替换为"%29”,那么它的行为应该与您预期的一样。
QString ppmPath = QString("http://" + ipAddress + ":13007/" + folder + ".ppm" + "?filePath="
+ applicationDirPath + "/" + FIRMWARE);
QUrl ppmURL( ppmPath, QUrl::TolerantMode );
ppmPath = QString( ppmURL.toEncoded() );
ppmPath.replace(QChar('('), "%%28");
ppmPath.replace(QChar(')'), "%%29");我不是百分之百确定需要双倍的百分比,但我记得在过去遇到过麻烦。两种方法都试一试。
或者,您可以尝试使用QUrl::toPercentEncoding()并完全跳过构造函数。它看起来是在转换圆括号。
QUrl ppmURL(QString("http://" + ipAddress + ":13007/" + folder + ".ppm"), QUrl::TolerantMode );
QString filepath = QUrl::toPercentEncoding(applicationDirPath + "/" + FIRMWARE);
ppmUrl.addEncodedQueryItem("filepath", filepath.toLocal8Bit());
ppmPath = QString( ppmURL.toEncoded() );https://stackoverflow.com/questions/13366591
复制相似问题