首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当有不明智的字符时,如何转换URL toURI?

当有不明智的字符时,如何转换URL toURI?
EN

Stack Overflow用户
提问于 2012-11-23 13:22:23
回答 3查看 2.3K关注 0票数 6

我有包含不明智的字符(RFC 2396)路径的URL对象--在我的例子中--它是“\”(管道)字符。现在我需要安全地将其转换为URI,但是URL.toURI()会抛出一个异常。

我读过URL文档,但这部分让我感到困惑:

URL类本身并不根据RFC2396中定义的转义机制对任何URL组件进行编码或解码。调用方有责任对调用URL之前需要转义的任何字段进行编码,并对从URL返回的任何转义字段进行解码。此外,因为URL不知道URL转义,所以它不承认同一URL的编码或解码形式之间的等价性。

那我该怎么做呢?在转换过程中编码这些字符的模式是什么?是否需要创建URL对象的编码副本?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-23 14:34:28

好吧,我想出了这样的点子:

代码语言:javascript
复制
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*/);

看起来很管用,下面是一个例子。有人能确认这是正确的解决办法吗?

编辑__:http://ideone.com/tCl7Yb在查询时出现了一些问题,所以我已经修复了它。

票数 3
EN

Stack Overflow用户

发布于 2012-11-23 14:42:12

使用URL编码?

从您的例子来看,您目前有:

代码语言:javascript
复制
URL url = new URL("http", "google.com", 8080, "/crapy|path with-unwise_characters.jpg");

相反,我会使用:

代码语言:javascript
复制
String path = "/crapy|path with-unwise_characters.jpg"
URL url = new URL("http", "google.com", 8080, URLEncoder.encode(path, "UTF-8"));

这应该可以按照标准URL编码处理路径中所有不明智的字符。

票数 1
EN

Stack Overflow用户

发布于 2013-02-04 22:09:12

HTTPClient 4有一个用于该org.apache.http.client.utils.URIBuilder的对象:

代码语言:javascript
复制
           URIBuilder builder = 
            new URIBuilder()
        .setScheme(url.getProtocol())
        .setHost(url.getHost())
        .setPort(url.getPort())
        .setUserInfo(url.getUserInfo())
        .setPath(url.getPath())
        .setQuery(url.getQuery());
    URI uri = builder.build();
    return uri;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13530019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档