如何在 Java 中进行 URL 解码?

新手上路,请多包涵

在 Java 中,我想将其转换为:

 https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do%3Frequest_type

对此:

 https://mywebsite/docs/english/site/mybook.do&request_type

这是我到目前为止所拥有的:

 class StringUTF
{
    public static void main(String[] args)
    {
        try{
            String url =
               "https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2Fmybook.do" +
               "%3Frequest_type%3D%26type%3Dprivate";

            System.out.println(url+"Hello World!------->" +
                new String(url.getBytes("UTF-8"),"ASCII"));
        }
        catch(Exception E){
        }
    }
}

但它不能正常工作。这些 %3A%2F 调用的格式是什么?如何转换它们?

原文由 crackerplace 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 507
2 个回答

这与 UTF-8 或 ASCII 等字符编码无关。你那里的字符串是 URL encoded 。这种编码与字符编码完全不同。

尝试这样的事情:

 try {
    String result = java.net.URLDecoder.decode(url, StandardCharsets.UTF_8.name());
} catch (UnsupportedEncodingException e) {
    // not going to happen - value came from JDK's own StandardCharsets
}

Java 10 向 API 添加了对 Charset 的直接支持,这意味着无需捕获 UnsupportedEncodingException:

 String result = java.net.URLDecoder.decode(url, StandardCharsets.UTF_8);

请注意, _字符编码_(如 UTF-8 或 ASCII)决定了字符到原始字节的映射。有关字符编码的详细介绍,请参阅 本文

原文由 Jesper 发布,翻译遵循 CC BY-SA 4.0 许可协议

你得到的字符串是 application/x-www-form-urlencoded 编码。

使用 URLDecoder 将其转换为 Java String。

 URLDecoder.decode( url, "UTF-8" );

原文由 Alexander Pogrebnyak 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏