领导要求写个页面,功能为:本页面数据保存为Word文档,提供个用户下载。
---
转换Word文档,采用java2word 。
--
下载用io流,但,下载的文件内容乱码。
--
最好,采用document.location=".../documentfile/**.doc" (直接定位到文件)。
此方法,下载下来的文件没有乱码。
可是,在有的机器上是直接在新页面打开了。而不是,弹出对话框下载。
---
======================
想问:
1、io流,文件内容乱码,什么原因造成的呢,怎么解决呢? 
--
2、直接指向文件下载。是浏览器的功能么?还是HTTP协议的预定义? 此方法导致在新页面打开是浏览器的设置问题么,那么,可以通过代码改变浏览器的设置吗?

解决方案 »

  1.   

    编码格式不同意,推荐都使用utf-8,楼主也可以写个过滤器多乱码进行过滤!祝你好运
      

  2.   

    字符集要保持一直   转word时  系统字符集  还有数据库  程序字符集等等
      

  3.   

    直接指向文件下,是浏览器使用了HTTP协议,和服务器端相互配合完成。自动打开文件原因:用户第一次打开某一类型的文件,浏览器弹出一个对话框,提示是下载还是直接打开文件,对话框左下角有一个checkbox,问下次还要不要跳出这个提示框,默认是勾选(提示),如果把这个勾选去掉,选择直接打开,那么以后对于这种类型的文件,每次都是自动打开。 修改回去的方法在下面的链接中:
    http://www.mydigitallife.info/2007/06/15/disable-automatic-opening-or-saving-of-downloads-re-enable-always-ask-before-check-box/
      

  4.   

    转word时用的是插件(java2word)。我直接用他的API,
    Document doc = new Document();
    doc.newDoc(...);
    doc.insertAtBook(...);
    ....
    它用的什么字符集不知道。在服务器上是没有乱码的。
    从服务器下载下来到本机就乱码了。
    ====
    1、2、3楼,都说用utf-8。
    io操作,字节流里有可以指定字符集的API吗? 字符流的有,可是我操作了几次,结果是,空白。我有finally中close啊,虽然没有flush 。
    ---
    一直分不清楚:  
    读取文件时,一个字节一个字节的读取,转换时,按几个字节转换?? 英文一个字节就可以代表,中文三个字节代表。那读取时,怎么知道下一个字节是英文,还是中文的其中一个字节呢?
    ---
    请高人解惑,谢谢!
      

  5.   

    org.jdom.output.Format format = org.jdom.output.Format.getPrettyFormat();    
    format.setEncoding("UTF-8");//设置编码格式    这样可以么?
      

  6.   

    org.jdom.output.Format 没用过。
    ---
    现在我的问题是:用io流方式,从服务器下载一个已有的word文档。或者其他的文件。
    能保证文件内容不出现乱码,就OK。
      

  7.   

    出现乱码的关键,是你生成word的时候,而不是下载到本地之后
    在生成work之前,你先设置编码格式,和你的服务器的编码,工程编码,就设置成一样
      

  8.   


    流可以设置,字符集吗??  
    文件名,还可以用  java.net.URLEncoder.encode(filename,"UTF-8");
    --- 整个word文件,如何指定读取的编码呢???
    求高人指定!!!
      

  9.   

    给你来个兼容firefox的方法,我都是用这个的,IE也很好 public static String encodeFileName(HttpServletRequest request, String fileName) throws UnsupportedEncodingException {   
            String agent = request.getHeader("USER-AGENT");   
            if (null != agent && -1 != agent.indexOf("MSIE")) {   
                return URLEncoder.encode(fileName, "UTF-8");   
            }else if (null != agent && -1 != agent.indexOf("Mozilla")) {   
                return "=?UTF-8?B?"+(new String(Base64.encodeBase64(fileName.getBytes("UTF-8"))))+"?=";   
            } else {   
                return fileName;   
            }   
      

  10.   


    下载弹出用这个,注意attachment,就是附件的意思
    response.setHeader("Content-disposition", "attachment ;filename=" + fileName);
      

  11.   

    如果直接URL定位到文件,譬如: http://192.168.1.80:7001/Platform/AppHomepg/ ../download/filename.doc
    下载下来的是没有问题的。 打开也是正常的。。
    --- 但,用java io 流 下载,就乱码了。
    -- 我试了,如果用流 下载 一个 **.txt 的文档 是没问题的。 也就是,word文档不同其他文件。流的方式下载,就出现乱码了。  
    做了几天的测试,都没成功!