java.net.URLEncoder.java的源代码为:
[code]
if (dontNeedEncoding.get(c)) {
if (c == ‘ ‘) {
c = ‘+’;
needToChange = true;
}
//System.out.println(”Storing: ” + c);
out.append((char)c);
i++;
}
[/code]
测试代码
[code]
String url=”http://618119.com/docs/测试 空格.doc”;
String nurl=url.substring(0,url.lastIndexOf(’/')+1)+java.net.URLEncoder.encode(url.substring(url.lastIndexOf(’/')+1), “UTF-8″);
System.out.println(nurl);
System.out.println(java.net.URLDecoder.decode(nurl, “UTF-8″));
[/code]
执行的结果为:
http://618119.com/docs/%E6%B5%8B%E8%AF%95+%E7%A9%BA%E6%A0%BC.doc
http://618119.com/docs/测试 空格.doc
而在与同事调试的时候,发现对方的web服务器处理得有点问题,没能将加号还原为空格,
对文件名只截取到了空格前面部分的内容,导致在下载的时候,
头信息 content-disposition和Content-Type
写入的内容不对,导致手机无法正常下载文件。
无法正常下载到手机时的头信息是:
content-disposition: attachment; filename=”测试”
Content-Type: application/octet-stream因此修改代码,对url进行替换,将加号替换成”%20″;
修改后的代码为:
[code]
String url=”http://618119.com/docs/测试 空格.doc”;
String nurl=url.substring(0,url.lastIndexOf(’/')+1)+java.net.URLEncoder.encode(url.substring(url.lastIndexOf(’/')+1), “UTF-8″);
nurl=nurl.replaceAll(”\\+”, “%20″);//处理空格
System.out.println(nurl);
System.out.println(java.net.URLDecoder.decode(nurl, “UTF-8″));
[/code]
执行结果为:
http://618119.com/docs/%E6%B5%8B%E8%AF%95%20%E7%A9%BA%E6%A0%BC.doc
http://618119.com/docs/测试 空格.doc
用手机可以正常下载文件时的头信息为:
content-disposition: attachment; filename=”测试 空格.mp3″
Content-Type: audio/x-mpeg
Related posts
Tags: Java