【问题标题】:How to use excluded delimiters in URI如何在 URI 中使用排除的分隔符
【发布时间】:2011-10-28 10:15:06
【问题描述】:

我需要通过提供一个包含分隔符的表示来创建一个 java URL 对象,该分隔符不包含在 US_ASCII 字符中。你可以在这里找到规范2.4.3. Excluded US-ASCII Characters

例如,

http://localhost:8182/a%image.tif

http://localhost:8182/a#image.tif

有人知道解决方法吗?

【问题讨论】:

    标签: java http url


    【解决方案1】:

    你不能对字符进行编码吗?所以 # => %23 和 % => %25。查看W3Schools的更多信息

    【讨论】:

    • 请不要参考 W3Schools。它充满了错误和误导性的建议。见w3fools.com
    • 好吧,幸运的是这个特定页面不在错误列表中;-) 无论如何,感谢您的提醒。我不知道其中大部分错误,但这可能是因为我从未访问过其中大部分页面。
    • 恐怕部分页面充满了诸如“URL编码将字符转换为可以在Internet上传输的格式”之类的废话以及诸如将正确的URL编码与应用程序混淆之类的错误/ x -www-form-urlencoded MIME 类型。
    • 嗯,一个更好的参考可能是维基百科,但幸运的是 W3Schools 表中的两个编码是正确的 :-) en.wikipedia.org/wiki/Percent-encoding
    【解决方案2】:

    通常,只有在将各个组件组合成最终 URI 之前,对各个组件进行编码才能安全地构建 URI。在这种情况下,a%image.gif 是一个路径组件,必须根据路径产生式进行编码(rfc 2369 中的 3.3)。

    使用 java.net.URI 创建合法的 URI(和 URL):

        URI uri = URI.create("http://localhost:8182/a%25image.gif");
        System.out.println(uri.toASCIIString());
        System.out.println(uri.getPath());
    

    您应该会看到未编码的最后一条语句的输出。

    从技术上讲,第二个 URL 并不违法,image.gif 将被视为片段。但如果哈希字符是路径的一部分,当然也必须对其进行编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 2019-06-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2016-02-20
      相关资源
      最近更新 更多