编码和解码rfc2396 URL

对URL字符串进行编码的最佳方法是什么,使它们符合rfc2396并解码符合rfc2396的字符串,例如将%20替换为空格字符?

编辑:URLEncoder和URLDecoder类编码/解码符合rfc2396的URL,它们编码为MIME类型application / x-www-form-urlencoded,用于编码HTML表单参数数据。

使用URI类如下:

URI uri = new URI("http", "//www.someurl.com/has spaces in url", null); URL url = uri.toURL(); 

或者如果你想要一个字符串:

 String urlString = uri.toASCIIString(); 

您的组件部分(可能包含必须转义的字符)应该已经使用URLEncoder进行转义,然后再连接到URI。

如果你有一个带有带外字符的URI(如空格,“<> [] {} \ | ^`和非ASCII字节),它实际上不是一个URI。你可以尝试修复它们手动%-escaping它们,但这是一个最后的修复操作,而不是标准的编码形式。当你从用户输入接受可能格式错误的URI时,这通常是必要的,但它不是一个标准化的操作,我不喜欢我不知道任何内置的Java库函数会为你做这件事;你可能不得不用RegExp自己解决一些问题。

在另一个方向上,您必须将URI分离为其组成部分(每个单独的路径部分,查询参数名称和值等),然后才能覆盖每个部分(使用URLDecoder)。 没有明智的方法可以一次性对整个URI进行编码; 您可以尝试“解码不解码为分隔符的%-escapes”(例如/?=&;%)但是您将留下一个不符合任何URI处理标准的奇怪的不一致字符串。

URLEncoder / URLDecoder适用于处理URI查询组件,包括名称和值。 但是,它们不适合处理URI路径部件组件。 不同之处在于’+’字符并不意味着路径部分中的空格。 您可以使用简单的字符串替换来解决此问题:在URLEncoding之后,将’+’替换为’%20′; 在URLDecoding之前,将’+’替换为’%2B’。 如果您不打算在路径中包含包含空格或加号的段,则可以忽略差异。

javadocs建议使用java.net.URI类来完成编码。 要确保URI类正确编码url,必须使用其中一个多参数构造函数。 这些构造函数将执行所需的编码,但需要您将任何url字符串解析为参数。

如果要解码,则必须使用单个参数构造函数构造URI,该构造函数不执行任何编码。 然后,您可以调用getPath()等方法来检索和构建已解码的URL。

使用java.net.URLEncoder和java.net.URLDecoder 。