3

私のアプリケーションでは、ボタンをクリックして開きたい HTML ファイルを生成します。したがって、私のファイルの名前は次のようになります。

QString file = "F:/the_path/to_the_/generated_html_file.html";

Windows では、次のように変更します。

file = "file:///F:/the_path/to_the_/generated_html_file.html";

で開くことができるように:

QDesktopServices::openUrl(QUrl(file));

デフォルトのブラウザで開きます。

しかし、文字#がパスまたはファイル名に存在する場合、それは機能しなくなり、URL が . の直後で切り捨てられているようです#

たとえば、ファイルに という名前を付けると、generated#_html_file.html次のエラー メッセージが表示されます。

ShellExecute 'F:/the_path/to_the_/generated' failed (error 2).

なぜそれが起こるのですか?どうすれば回避できますか?

4

2 に答える 2

12

URL では#、リソースの場所から「フラグメント識別子」を区切る文字です。file:URL をリテラルで参照する#には、エスケープする必要があります ( as %23)。

参照: RFC 1738:

文字「#」は安全ではなく、常にエンコードする必要があります。これは、World Wide Web やその他のシステムで、それに続く可能性のあるフラグメント/アンカー識別子から URL を区切るために使用されるためです。

SteveTJSで指摘されているように、静的メソッドQUrl::fromLocalFile()はこの目的のために提供されているため、次のように記述できます。

QDesktopServices::openUrl(QUrl::fromLocalFile(file));

それ以外の

QDesktopServices::openUrl(QUrl(file));

この意志

  1. file:プロトコル識別子と//空のホスト名を先頭に追加します
  2. ネイティブ パス区切り記号を変換する/(異なる場合)
  3. URL の安全でない文字をエンコードします。
于 2015-07-22T13:03:32.427 に答える