Java 6中的URL解码

dan*_*nik 19 java

我看到它java.net.URLDecoder.decode(String)在6 中被弃用了.

我有以下字符串:

String url ="http://172.20.4.60/jsfweb/cat/%D7%9C%D7%97%D7%9E%D7%99%D7%9D_%D7%A8%D7%92%D7%99%D7%9C%D7%99%D7%9"
Run Code Online (Sandbox Code Playgroud)

我应该如何在Java 6中解码它?

Dra*_*mon 55

您应该使用java.net.URI来执行此操作,因为URLDecoder类执行x-www-form-urlencoded解码是错误的(尽管名称,它是表单数据).

  • @whoever downvoted:注意详细说明这部分是错误的? (6认同)
  • 这是正确的答案!这让人们一直在吵闹.URLEncoder/URLDecoder为*URL编码和解码表单数据*,而不是URL本身.URL类提供URL本身的编码和解码.并且URI类是更新的,更好指定的,更通用的API - 每个URL字符串也是URI字符串,因此使用URI来解析职责.URL类本身警告不要混淆使用URLEncoder/Decoder:"也可以使用URLEncoder和URLDecoder类,但仅用于HTML表单编码,这与RFC2396中定义的编码方案不同." (3认同)
  • *media*-type`application/x-www-form-urlencoded`指的是用于URL的编码,由`URLDecoder`指定的详细规则清楚地表明它对于解码URL非常有效.所以它更简单,并且使用`URLDecoder`可能更快. (3认同)
  • java.net.URI.decode()现在是私有的 (2认同)
  • URLDecoder 会将“+”替换为“”,这是不正确的。"+" 只应在查询字符串键和值中更改为 " "。 (2认同)

Tim*_*per 27

现在您需要指定字符串的字符编码.根据URLDecoder页面上的信息:

注意:万维网联盟建议书规定应使用UTF-8.不这样做可能会引入不相容性.

以下内容对您有用:

java.net.URLDecoder.decode(url, "UTF-8");
Run Code Online (Sandbox Code Playgroud)

请参阅下面的Draemon的答案.

  • -1这是完全错误的.文档明确指出此方法使用application/x-www-form-urlencoded,它仅用于查询字符串. (4认同)
  • 如果问题是正确的,这将是正确的答案!如果正确使用了one-arg版本的decode(),则应使用双参数版本. (3认同)

Joa*_*uer 7

正如文档所提到的那样,decode(String)因为它总是使用平台默认编码而被弃用,这通常是错误的.

请改用双参数版本.您需要指定转义部分使用的编码.


Mat*_*arz 5

decode(String)弃用该方法.您应该使用该decode(String, String)方法显式设置字符编码以进行解码.