URLEncoder 、URLDecoder 对 URL 编解码,HttpURLConnection 文件下载

目录

URLEncoder  编码

URLDecoder 解码

URL 空格问题 与 HttpURLConnection 文件下载


URLEncoder  编码

1、public class URLEncoder extends Object :HTML 格式编码的实用工具类。

2、该类包含了将 String 转换为 application/x-www-form-urlencoded MIME 格式的静态方法。

3、对 String 编码时,使用以下规则: 

1)字母数字字符 "a" 到 "z"、"A" 到 "Z" 和 "0" 到 "9" 保持不变。 

2)特殊字符 "."、"-"、"*" 和 "_" 保持不变。 

3)空格字符 " " 转换为一个加号 "+"。 

4)所有其他字符都是不安全的,因此首先使用一些编码机制将它们转换为一个或多个字节。然后每个字节用一个包含 3 个字符的字符串 "%xy" 表示,其中 xy 为该字节的两位十六进制表示形式。

5)推荐的编码机制是 UTF-8。但是,出于兼容性考虑,如果未指定一种编码,则使用相应平台的默认编码。

Modifier and TypeMethod and Description
static Stringencode(String s)已弃用

结果字符串可能会因平台的默认编码而异。 而是使用encode(String,String)方法来指定编码。

static Stringencode(String s,String enc) 使用特定的编码方案将字符串转换为 application/x-www-form-urlencoded格式。

URLDecoder 解码

1、public class URLDecoder extends Object :HTML 格式解码的实用工具类。

2、该类包含了将 String 从 application/x-www-form-urlencoded MIME 格式解码的静态方法。 

3、该转换过程正好与 URLEncoder 类使用的过程相反

Modifier and TypeMethod and Description
static Stringdecode(String s)已弃用

结果字符串可能会因平台的默认编码而异。 而是使用decode(String,String)方法来指定编码。

static Stringdecode(String s, String enc) 使用特定的编码方案解码 application/x-www-form-urlencoded字符串。

4、编码与解码都各自只有一个方法,所以使用很简单。

/**
 * url地址编码与解码测试
 * @throws UnsupportedEncodingException
 */
@Test
public void test1() throws UnsupportedEncodingException {
        String url = "http://192.168.1.20:80/server/upload/西游2 仙履奇缘.mp4";
        System.out.println("源地址:" + url);
        url = URLEncoder.encode(url, "UTF-8");
        // 编码后:http%3A%2F%2F192.168.1.20%3A80%2Fserver%2Fupload%2F%E8%A5%BF%E6%B8%B82+%E4%BB%99%E5%B1%A5%E5%A5%87%E7%BC%98.mp4
        System.out.println("编码后:" + url);
        url = URLDecoder.decode(url, "UTF-8");
        // 解码后:http://192.168.1.20:80/server/upload/西游2 仙履奇缘.mp4
        System.out.println("解码后:" + url);
}

https://gitee.com/wangmx1993/web_app/blob/master/src/test/java/com/java/UrlTest.java

src/main/java/com/wmx/www/controller/DownloadFileController.java · 汪少棠/fileServer - Gitee.com

URL 空格问题 与 HttpURLConnection 文件下载

1、URLEncoder对"空格"使用"+"进行编码,使用URLDecoder反向解码时也是正确的,但是做文件下载时,浏览器就识别不了这个"+",从而导致找不到文件。

2、解决办法是将编码后路径中"+"用"%20"代替即可

3、系统中上传文件存放的路径,自己可以设置不含中文、不含空格,但是用户上传的文件没有办法约束。

4、如下所示,客户端下载服务器上的文件,对服务器的文件名做URLEncode编码UTF-8,然后用"%20"替换路径中空格符合"+",这样下载就ok了。(注意编码时范围越小越好,不要对前缀"http"也编码)

https://gitee.com/wangmx1993/web_app/blob/master/src/test/java/com/java/UrlTest.java

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚩尤后裔-汪茂雄

芝兰生于深林,不以无人而不芳。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值