【发布时间】:2011-10-28 10:15:06
【问题描述】:
我需要通过提供一个包含分隔符的表示来创建一个 java URL 对象,该分隔符不包含在 US_ASCII 字符中。你可以在这里找到规范2.4.3. Excluded US-ASCII Characters。
例如,
http://localhost:8182/a%image.tif
或
http://localhost:8182/a#image.tif
有人知道解决方法吗?
【问题讨论】:
我需要通过提供一个包含分隔符的表示来创建一个 java URL 对象,该分隔符不包含在 US_ASCII 字符中。你可以在这里找到规范2.4.3. Excluded US-ASCII Characters。
例如,
http://localhost:8182/a%image.tif
或
http://localhost:8182/a#image.tif
有人知道解决方法吗?
【问题讨论】:
你不能对字符进行编码吗?所以 # => %23 和 % => %25。查看W3Schools的更多信息
【讨论】:
通常,只有在将各个组件组合成最终 URI 之前,对各个组件进行编码才能安全地构建 URI。在这种情况下,a%image.gif 是一个路径组件,必须根据路径产生式进行编码(rfc 2369 中的 3.3)。
使用 java.net.URI 创建合法的 URI(和 URL):
URI uri = URI.create("http://localhost:8182/a%25image.gif");
System.out.println(uri.toASCIIString());
System.out.println(uri.getPath());
您应该会看到未编码的最后一条语句的输出。
从技术上讲,第二个 URL 并不违法,image.gif 将被视为片段。但如果哈希字符是路径的一部分,当然也必须对其进行编码。
【讨论】: