gpt4 book ai didi

qt - 如何使用 QDesktopServices::openUrl 与 'file:' URL 包含 '#' ?

转载 作者:行者123 更新时间:2023-12-03 22:47:58 26 4
gpt4 key购买 nike

在我的应用程序中,我生成了一个要通过单击按钮打开的 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).

为什么会发生这种情况,我该如何避免呢?

最佳答案

在 URL 中,#是从资源位置分隔“片段标识符”的字符。引用 file:带有文字 # 的 URL ,它需要被转义(如 %23 )。

引用:RFC 1738:

The character "#" is unsafe and should always be encoded because it is used in World Wide Web and in other systems to delimit a URL from a fragment/anchor identifier that might follow it.



SteveTJS 所述,静态方法 QUrl::fromLocalFile()是为此目的而提供的,所以你可以写

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

代替

QDesktopServices::openUrl(QUrl(file));

这会
  • 前置 file:协议(protocol)标识符和 //空主机名
  • 将 native 路径分隔符转换为 / (如果不同)
  • 对 URL 的任何非安全字符进行编码。
  • 关于qt - 如何使用 QDesktopServices::openUrl 与 'file:' URL 包含 '#' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31563699/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com