我的downinfo.jsp的页面代码如下:java.io.BufferedInputStream bis=null;
java.io.BufferedOutputStream bos=null; try{ String filename=request.getParameter("filename");
response.setContentType("application/x-msdownload");
filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
//response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
//response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("GBK"),"iso8859-1"));
//response.setHeader("Content-disposition","attachment; filename="+filename);
bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("upload/" + filename)));
bos=new java.io.BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff,0,bytesRead);
}
bis.close();
bos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
out.clear();
out = pageContext.pushBody();
}现在的问题是有些中文文件名不会出现乱码,有些中文文件名会出乱码。比如:表格.txt不会出乱码,表.txt就会出乱码。
我的页面统一编码为utf-8.
java.io.BufferedOutputStream bos=null; try{ String filename=request.getParameter("filename");
response.setContentType("application/x-msdownload");
filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
//response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
//response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("GBK"),"iso8859-1"));
//response.setHeader("Content-disposition","attachment; filename="+filename);
bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("upload/" + filename)));
bos=new java.io.BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff,0,bytesRead);
}
bis.close();
bos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
out.clear();
out = pageContext.pushBody();
}现在的问题是有些中文文件名不会出现乱码,有些中文文件名会出乱码。比如:表格.txt不会出乱码,表.txt就会出乱码。
我的页面统一编码为utf-8.
不知道是什么原因。。
filename=URLDecoder.decode(filename,"iso-8859-1");
filename = new String(filename.getBytes("iso-8859-1"),"UTF-8");
filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
执行这句代码的时候,不同的中文文件名有的可以正常显示,可是有的确实乱码。
上面的方法也试过了,是不行。
大家也可以帮我改下上面的代码,到底是哪出问题了。如果是编码问题的话,不可能有的时候可以的有的时候又不行的吧。
此时filename是乱码,当这个乱码中含有?的话,就会转码失败就是不能转成正常的中文。如果filename中不含?的话,就会正常。
Window->Preferences->General->Workspace->Text file encoding这么以后,你应该就不用转码了,直接取就行了!
更改Eclipse默认编码!将其改为UFT-8即可。
如果已经是utf-8,那你应该就不用再转码了!
你把转码的代码去掉试试!
new String(filename.getBytes("GBK"),"ISO8859_1")这么着不行?我这就是用这个。的。。
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
这一句是用来捣乱的,去掉,如果你的页面是UTF-8的,我做了两处修改其一:在服务器容器中设置URIEncoding="UTF-8",例如tomcat的server.xml
<Connector
port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>
其二,在配置下载类的地方添加
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
然后就ok了
我原来也遇到过下载的时候会乱码
reqest获取的时候就是乱码? 你要知道怎么会出现乱码
要不怎么转也不对。。
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
这个有问题吧。
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
这个有问题吧。
代码:
var filename = encodeURI(str);
var attr = '<a href="admin/downInfo.jsp?filename='+filename+'">'+str+'</a>'+' ';downInfo.jsp代码:
<%
java.io.BufferedInputStream bis=null;
java.io.BufferedOutputStream bos=null; try{ String filename=request.getParameter("filename");
response.setContentType("application/x-msdownload");
filename=new String(filename.getBytes("iso8859-1"),"UTF-8");
response.setHeader("Content-disposition","attachment; filename="+new String(filename.getBytes("gb2312"),"iso8859-1"));
bis =new java.io.BufferedInputStream(new java.io.FileInputStream(config.getServletContext().getRealPath("upload/" + filename)));
bos=new java.io.BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff,0,bytesRead);
}
bis.close();
bos.close();
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
out.clear();
out = pageContext.pushBody();
}
%>
页面的编码均为utf-8
response.setHeader("Content-disposition","attachment; filename="+java.net.URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"));