2

我正在开发一个通过 HTTP 导出本地文件的项目。这涉及获取文件 URI,使用导出的路径对其进行相对化,将其附加到导出 URI,然后在接收端将其作为 URL 处理。

通常这可以正常工作,但是当文件名包含分号时我会遇到麻烦。我把它缩小到这里:

new File(path).toURI()

上述方法正确编码了空格等,但不编码分号(应编码为 %3B)。

最终,上述方法返回 URI 构造函数(协议、主机、路径、片段)的结果,该结果返回错误的 URI。

我可以用 %3B 手动替换所有分号,但这并不是最好的解决方案。真的没有内置 API 可以正确编码路径吗?

非常感谢您的帮助。

4

2 回答 2

2

分号是 URI 中完全有效的字符。当然如果接收端使用分号作为特殊的分隔符,发送端需要对其进行转义。但这超出了标准做法,所以你必须自己逃避它。

但是在 java 世界中,servlet 是标准,它使用分号作为特殊的分隔符。我不知道有任何实用程序可以帮助您,因此您仍然需要手动转义分号。

于 2013-04-16T19:20:40.480 回答
0

分号没有自动转义的原因是因为它在 URI 规范中具有含义——它界定了“路径参数”。以下 URI 有效: /some;a=b/path

并用value/some/path的路径参数表示路径。ab

所以在这种情况下,转义必须是手动的,因为 URI 无法确定分号是分隔参数还是路径的一部分。

于 2022-02-21T11:53:23.110 回答