url - URISyntaxException - 如何处理带有 % 的 url

标签 url http-get

我对Java相当陌生,遇到了这个问题。我尝试搜索,但从未得到正确答案。

例如,我有一个字符串

String name = anything 10%-20% 04-03-07

现在我需要使用这个字符串名称构建一个 url 字符串,如下所示。
http://something.com/test/anything 10%-20% 04-03-07

我尝试用 %20 替换空格,现在我得到了新的 url
http://something.com/test/anything%2010%-20%%2004-03-07

当我使用这个 url 并在 firefox 中触发它时,它工作正常,但在 Java 中处理时,它显然是在抛出
Exception in thread "main" java.lang.IllegalArgumentException
at java.net.URI.create(Unknown Source)
at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:69)
Caused by: java.net.URISyntaxException: Malformed escape pair at index 39 : 
at java.net.URI$Parser.fail(Unknown Source)
at java.net.URI$Parser.scanEscape(Unknown Source)
at java.net.URI$Parser.scan(Unknown Source)
at java.net.URI$Parser.checkChars(Unknown Source)
at java.net.URI$Parser.parseHierarchical(Unknown Source)
at java.net.URI$Parser.parse(Unknown Source)
at java.net.URI.<init>(Unknown Source)
... 6 more

这是代码抛出错误
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);

最佳答案

也用 %25 编码百分号.
http://something.com/test/anything 10%-20% 04-03-07将与 http://something.com/test/anything%2010%25-20%25%2004-03-07 一起使用.

您应该可以使用例如 URLEncoder.encode为此 - 请记住,您需要对路径部分进行 urlencode,而不是在此之前的任何内容,例如

String encodedUrl =
    String.format("http://something.com/%s/%s",
      URLEncoder.encode("test", "UTF-8"),
      URLEncoder.encode("anything 10%-20% 04-03-07", "UTF-8")
    );

注意:URLEncoder 将空格编码为 +而不是 %20 ,但它应该同样有效,两者都可以。

关于url - URISyntaxException - 如何处理带有 % 的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12422256/

相关文章:

javascript - 使用 YouTube API 通过查询获取有关所有视频的观看次数的信息

php - Zend Framework 是否有构建 URL 查询字符串的助手?

Java:非小程序应用程序上的 getCodeBase()

php - 如何处理 XML 中 URL 中的特殊字符

android - 第一次 HTTP POST 和 GET 尝试总是很慢——这是操作系统相关的还是网络相关的?

php - 虚假的 jQuery ajax GET 参数

jquery - 为什么我收到 OPTIONS 请求而不是 GET 请求?

java - Android:如何使用下载管理器类?

javascript - 跟踪地址栏中输入的单词

java - 在他们登录我的网站/应用程序后,我如何请求 Facebook 权限?