java.net.URLEncoder对空格的处理的问题

作者:lizongbo 发表于:8:28 下午. 星期一, 7月 7th, 2008
版权声明:可以任意转载,转载时请务必以超链接形式标明文章和作者信息及本版权声明

java.net.URLEncoder对url进行编码处理的时候,对空格是替换成了加号,而不是%20

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

Tags: Java

Related posts

Tags:

recent related 12 searches :

本文发表于 on 星期一, 7月 7th, 2008 at 8:28 下午 and is filed under Java. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.

Leave a Reply