我有URL对象,路径包含不明智的字符(RFC 2396)在我的情况下它是"|" (管)字符.现在我需要安全地将其转换为URI,但URL.toURI()抛出异常.
我读过URL文档,但这部分让我感到困惑:
URL类本身不会根据RFC2396中定义的转义机制对任何URL组件进行编码或解码.调用者负责编码任何字段,这些字段需要在调用URL之前进行转义,并且还要解码从URL返回的任何转义字段.此外,由于URL不知道URL转义,因此它无法识别相同URL的编码或解码形式之间的等效性.
那我该怎么办呢?在转换过程中对此字符进行编码的模式是什么?我是否需要创建URL对象的编码副本?
好吧,我想出了这样的东西:
URI uri = new URI(url.getProtocol(),
null /*userInfo*/,
url.getHost(),
url.getPort(),
(url.getPath()==null)?null:URLDecoder.decode(url.getPath(), "UTF-8"),
(url.getQuery()==null)?null:URLDecoder.decode(url.getQuery(), "UTF-8"),
null /*fragment*/);
Run Code Online (Sandbox Code Playgroud)
看起来可行,这是一个例子。有人可以确认这是正确的解决方案吗?
编辑:初始解决方案在有查询时出现一些问题,所以我已经修复了它。
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |