将文件名编码成ISO8859-1是有效的解决方案,在火狐、IE浏览器上好用:

response.setContentType("application/x-msdownload");
response.setHeader( "Content-Disposition", "p_w_upload;filename=" + 
new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );

参考:http://lj830723.iteye.com/blog/1415479