0

私たちのアプリケーションは32ビットアプリケーションです。Windows 7 64ビットにインストールする場合、通常は「C:\ ProgramFiles」ではなく「C:\ ProgramFiles(x86)」にインストールします。インストール場所に基づいてURLを作成し、Webサービスの一部として渡します。次のようにURLを作成しています。

ppmPath = "http://" + ipAddress + ":13007/" + folder + ".ppm" + "?filePath="
          + applicationDirPath + "/" + FIRMWARE;
QUrl ppmURL( ppmPath, QUrl::TolerantMode );
ppmPath = QString( ppmURL.toEncoded() );

変数の種類と意味は通常です。

Windows 7 64ビットの「applicationDirPath」には1つの閉じ括弧「)」が含まれているため(「(x86)」サブストリング内)、URLが壊れているようです。他の場所にインストールすると、その場所に他の特殊文字が含まれていても、完全に機能します。

URLの「)」文字を処理して、壊れないようにするにはどうすればよいですか?

4

1 に答える 1

2

ドキュメントから、トレラント モードであっても、括弧が QUrl によって自動的にエンコードされるようには見えません。最初に URL を 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");

double-% がそこにある必要があるかどうかは 100% 確信が持てませんが、過去にそれで問題が発生したことを覚えています。両方の方法で試してください。

または、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() );
于 2012-11-13T22:35:53.593 に答える