2
java.net.URI.create("http://adserver.adtech.de/adlink|3.0")

投掷

java.net.URISyntaxException: 
Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0

虽然

new java.net.URL("http://adserver.adtech.de/adlink|3.0")

工作得很好。

更新 1

虽然

new org.apache.commons.httpclient.URI("http://adserver.adtech.de/adlink|3.0")

也很完美。

什么原因?

4

1 回答 1

6

采用单个 String 参数的 URI 构造函数要求您遵循 RFC 2396 为 URI 定义的严格语法规则。根据那些规则|应该被编码为%7C. 其他构造函数可以为您编码 URI 组件,因此例如这不会引发异常:

new java.net.URI("http", "//adserver.adtech.de/adlink|3.0", null);

另一个 URL 类不强制执行 URI 语法规则。事实上,对应该编码的组件进行编码是您的责任;URL 类不会帮助你。从文档中

调用者有责任对在调用 URL 之前需要转义的任何字段进行编码,并对从 URL 返回的任何转义字段进行解码。

于 2013-03-19T00:56:26.250 回答