将String转换为有效的URI对象

我想从一个String获取一个java.net.URI对象。 该字符串有一些字符,需要用它们的百分比转义序列替换。 但是,当我使用URLEncoder对UTF-8编码的字符串进行编码时,甚至将其替换为它们的转义序列。

如何从String对象获取有效的编码URL?

http://www.google.com?q=ab提供http%3A%2F%2www.google.com ...而我希望输出为http://www.google.com?q=a%20b

有人可以告诉我如何做到这一点。

我正在尝试在Android应用中执行此操作。 所以我可以访问数量有限的图书馆。


您可以尝试:Apache commons-httpclient项目中的org.apache.commons.httpclient.util.URIUtil.encodeQuery

像这样(请参阅URIUtil):

URIUtil.encodeQuery("http://www.google.com?q=a b")

会变成:

http://www.google.com?q=a%20b

你当然可以自己动手,但是URI解析会变得很杂乱......


Android始终将Uri类作为SDK的一部分:http://developer.android.com/reference/android/net/Uri.html

你可以简单地做一些事情:

String requestURL = String.format("http://www.example.com/?a=%s&b=%s", Uri.encode("foo bar"), Uri.encode("100% fubar'd"));

我要在这里添加一个针对Android用户的建议。 你可以做到这一点,避免必须得到任何外部库。 此外,上述某些答案中提出的所有搜索/替换字符解决方案都是危险的,应该避免。

试试这个:

String urlStr = "http://abc.dev.domain.com/0007AC/ads/800x480 15sec h.264.mp4";
URL url = new URL(urlStr);
URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
url = uri.toURL();

你可以看到,在这个特定的URL中,我需要对这些空格进行编码,以便我可以将它用于请求。

这利用了Android类中的一些功能。 首先,URL类可以将url分解为适当的组件,因此不需要进行任何字符串搜索/替换工作。 其次,当您通过组件构建URI而不是从单个字符串构建URI时,此方法利用了正确转义组件的URI类功能。

这种方法的美妙之处在于,您可以使用任何有效的url字符串并使其工作,而无需您自己对其进行任何特殊的了解。

链接地址: http://www.djcxy.com/p/26511.html

上一篇: Convert String to valid URI object

下一篇: Is autocomplete="off" compatible with all modern browsers?