【问题标题】:Creating a uri from a string, over encoding通过编码从字符串创建 uri
【发布时间】:2012-05-28 21:16:49
【问题描述】:

我正在解析网页上的一些链接,然后测试这些链接是否存在。我正在将解析的链接字符串转换为 uri,问题是某些链接已经具有如下编码字符:http://download.microsoft.com/download/6/3/c/63c1d527-9d7e-4fd6-9867-fd0632066740/kinect_qsg%20premium_bndl_en-fr-es.pdf

当通过我下面的代码时,我得到:http://download.microsoft.com/download/6/3/c/63c1d527-9d7e-4fd6-9867-fd0632066740/kinect_qsg%2520premium_bndl_en-fr-es.pdf

如您所见,这是对 %20 的编码。我该如何避免这种情况?我应该先解码我的字符串吗?如果是这样,最好的方法是什么?

URL url = null;
        URI uri = null;
        try {
            url = new URL(checkUrl);
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        }
        try {
            uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), url.getRef());
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }

【问题讨论】:

  • 使用 URLEncoder 和解码器类
  • 为什么不使用URL.toURI

标签: java url uri encode


【解决方案1】:

尝试使用 URLDecoder 类,

        URL url = null;
        URI uri = null;
        String checkUrl = "http://download.microsoft.com/download/6/3/c/63c1d527-9d7e-4fd6-9867-fd0632066740/kinect_qsg%20premium_bndl_en-fr-es.pdf"; 
        try {
            url = new URL(URLDecoder.decode(checkUrl,"UTF-8"));
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
        } catch (UnsupportedEncodingException e1) {
            e1.printStackTrace();
        }
        try {
            uri = new URI(url.getProtocol(), url.getAuthority(), url.getPath(), url.getQuery(), url.getRef());
            System.out.println(uri.getHost());
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }

类的类路径是java.net.URLDecoder

【讨论】:

    【解决方案2】:

    你可以使用:

    String decoded = URLDecoder.decode(yorUrl, "UTF-8");
    

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多