文件下载时常会出现如下问题: response.setHeader("Content-disposition","attachment; filename="+as+"");
如果as直接写中文名字时,就会直接在IE页面打开Excel文件(弹出后点打开会在IE页面打开,注意此时的“你想打开或保存此文件吗?”,名称会显示一个类似CAK....的名称,实现上并不是正常的 *.xls格式的名称),如图所示:

而不是另外弹出并打开Excel文件。解决办法是:(程序片段)

String as="我明白了.xls";
        String fileName =as;// = java.net.URLEncoder.encode(as, "UTF-8");
        /*根据request的locale 得出可能的编码,中文操作系统通常是gb2312*/
            fileName = new String(as.getBytes("GB2312"), "ISO_8859_1");  
            as=fileName;
        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-disposition","attachment; filename="+as+"");   
     
        BufferedInputStream bis = null;
     BufferedOutputStream bos = null;
     try {
        // bis = new BufferedInputStream(new FileInputStream(getServletContext().getRealPath("" + filename)));
      bis = new BufferedInputStream(new FileInputStream(dirFile));
      bos = new BufferedOutputStream(response.getOutputStream());

byte[] buff = new byte[2048];
         int bytesRead;

while(-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
             bos.write(buff,0,bytesRead);
         }
     } catch(final IOException e) {
         System.out.println ( "出现IOException." + e );
     } finally {
         if (bis != null)
             bis.close();
         if (bos != null)
             bos.close();
     }

程序段中最关键的一句:

new String(as.getBytes("GB2312"), "ISO_8859_1");

将文件命名转码. OK结果正常了>>>

这样就可以下载时用中文名称了,并且是另外打开Excel文件的。

转载:http://cutelion.blog.hexun.com/6980666_d.html

文件下载:"Content-disposition","attachment; filename=中文名>>>解决方案的更多相关文章

  1. response.setHeader("Content-disposition","attachment;filename="+fileName) 下载时文件名中存在空格错误

    最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader(" ...

  2. 使用response.setHeader("Content-Disposition","attachment;filename="+fName)下载文件,中文文件名无法显示的问题

    今天遇到这么一个情况,在Action代码中进行文件下载: ActionForm得到file_id,通过file_id进行数据库查询得到file_name以及服务器硬盘上的file_uri,其中file ...

  3. 【转】解决response.AddHeader("Content-Disposition", "attachment; fileName=" + fileName) 中文显示乱码

    如果fileName为中文则乱码.解决办法是 方法1: response.setHeader("Content-Disposition", "attachment; fi ...

  4. firfox中"content-disposition", "attachment;filename=“+filename不能显示文件名字

    一般要在浏览器中显示文件名,可以使用以下文件名 // 设置文件名的编码方式,使得文件的名字能够正常安全的显示. filename = URLEncoder.encode(filename, " ...

  5. 解决Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name) 中文显示乱码

    如果file.Name为中文则乱码.解决办法是方法1:response.setHeader("Content-Disposition", "attachment; fil ...

  6. C#中解决Response.AddHeader("Content-Disposition", "attachment; filename=" + filename)下载文件时文件名乱码的问题

    问题:下载文件时文件名乱码怎么解决? 在C#写后台代码过程中,经常遇到下载文件出现文件名乱码的问题,在网上找了很多方法,总是存在浏览器不兼容的问题,当IE浏览器不乱码时,火狐浏览器就会乱码,后来经过反 ...

  7. Response attachment filename 中文乱码

    Response.setHeader("Content-Disposition", "attachment; filename=" + fileName+&qu ...

  8. content-disposition attachment filename 在Firefox和IE中得到不同的结果

    在Firefox中需要把filename 用双引号包起来,才能得到想要的名字,不然如果含有空格,会丢掉空格后面的部分.而IE会把空格转为_,因此也需要HttpUtility.UrlPathEncode ...

  9. Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name) 中文显示乱码

    如果file.Name为中文则乱码.解决办法是方法1:response.setHeader("Content-Disposition", "attachment; fil ...

随机推荐

  1. KMP算法原理与实现(精简)

    思想:使源字符串中的下标不回溯,利用模式字符串自身的相关性,减少模式字符串中下标回溯的距离.从而减少比较的次数. 关键问题: 分析模式字符串,得出 部分匹配值数组. 原理参考此处. 具体实现: #in ...

  2. javascript笔记整理(数组)

    数组是一个可以存储一组或是一系列相关数据的容器. 一.为什么要使用数组. a.为了解决大量相关数据的存储和使用的问题. b.模拟真是的世界. 二.如何创建数组 A.通过对象的方式来创建——var a= ...

  3. js中使用jstl中得到的值

    jstl的标签会转化为服务器端的代码执行,而js代码则在客户端执行.        要在js中使用jstl并不是直接将jstl的value赋值给一个js的变量,而是要在jstl的value上加上&qu ...

  4. javascript 精典案例分析一览

    1.[优雅代码]深入浅出 妙用Javascript中apply.call.bind http://www.cnblogs.com/coco1s/p/4833199.html 2.1.0.1 ionic ...

  5. VB与报表的交互

    还接着上次说.在上个博客中已经说到建立好表的步骤了,接下来就是怎么使表与vb连接. 先看一下代码. Option Explicit Dim WithEvents Report As grproLibC ...

  6. Ace of Aces

    Description There is a mysterious organization called Time-Space Administrative Bureau (TSAB) in the ...

  7. 基于visual Studio2013解决面试题之0203栈实现

     题目

  8. poj 3082多边形相交 'Roid Rage

    题意是判断多边形是否相交 主要的思路就是判断每一个点是否在另外的多变形内 判断一个点是否在另一个多边形内主要思路是: 判断的那个点向左边做射线,如果射线与多边形的交点为奇数个则在多边形内,偶数个则不在 ...

  9. 华为OJ培训主题 比赛统计

    题目例如以下: 比赛情况统计 有一个游戏平台,各个參赛队伍(以唯一的TeamID来标识)之间进行单循环的对抗赛,两个队伍之间仅仅举行一场比赛,比赛以得分的多少定胜负.须要完毕一个统计赛况的程序,可以随 ...

  10. KVM 实现机制

    1.1.    KVM简介 KVM是一个基于Linux内核的虚拟机,它属于完全虚拟化范畴,从Linux-2.6.20开始被包含在Linux内核中.KVM基于x86硬件虚拟化技术,它的运行要求Intel ...