目录
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 Type | Method and Description |
---|---|
static String | encode(String s) 已弃用 结果字符串可能会因平台的默认编码而异。 而是使用encode(String,String)方法来指定编码。 |
static String | encode(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 Type | Method and Description |
---|---|
static String | decode(String s) 已弃用 结果字符串可能会因平台的默认编码而异。 而是使用decode(String,String)方法来指定编码。 |
static String | decode(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。