[align=left]做了个word保存String id = request.getParameter("id");
Detail dd = dbo.find_by_id(new Integer(id));
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String title = dd.getTitle().trim();
String detailContent = dd.getDetailContent();
response.setHeader("Content-disposition", "attachment; filename="+URLEncoder.encode(title,"UTF-8")+".doc");
out.write("<html>");
out.write("<head>");
out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
out.write("</head>");
out.write("<body>");
out.write("<h3 align=\"center\">"+title+"</h3><br>");
out.write(detailContent);
out.write("</body>");
out.write("</html>");
[/align]
发现当标题有一定长度时,会截断一部分字符串
比如:问题说明越详细,回答也会越准确!参见如何提问。 
会被截成
细,回答也会越准确!参见如何提问。 
请问这个怎么解决??

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【feng8008】截止到2008-07-31 11:17:13的历史汇总数据(不包括此帖):
    发帖的总数量:16                       发帖的总分数:100                      每贴平均分数:6                        
    回帖的总数量:47                       得分贴总数量:16                       回帖的得分率:34%                      
    结贴的总数量:15                       结贴的总分数:80                       
    无满意结贴数:10                       无满意结贴分:230                      
    未结的帖子数:1                        未结的总分数:20                       
    结贴的百分比:93.75 %               结分的百分比:80.00 %                  
    无满意结贴率:66.67 %               无满意结分率:287.50%                  
    值得尊敬

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=feng8008
      

  2.   

    长度截断是浏览器到问题,出于安全原因。另外,url本身也是有长度限制的
      

  3.   

    URL只能是1KB的长度,要怎么解决,期待高手!
      

  4.   

    有必要解决吗取这么长的标题,肯定不正常windows文件路径长度本身也是限制的!包括整个路径好像是128可以新建文件,然后名字无限加长,然后就会报错
      

  5.   

    转一个前阵子刚看到的一段,呵呵
    ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
    4. 测试并分析文件名乱码问题 
    response.setHeader()下载中文文件名乱码问题 
    response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8")); 
    下载的程序里有了上面一句,一般在IE6的下载提示框上将正确显示文件的名字,无论是简体中文,还是日文。不过当时确实没有仔细测试文件名为很长的中文文件名的情况。 现如今经过仔细测试,发现文字只要超过17个字,就不能下载了。分析如下: 
    (1). 通过原来的方式,也就是先用URLEncoder编码,当中文文字超过17个时,IE6 无法下载文件。这是IE的bug,参见微软的知识库文章 KB816868 。原因可能是IE在处理 Response Header 的时候,对header的长度限制在150字节左右。而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以会报错。而且不跟后缀也不对. 
    (2). 解决方案:将文件名编码成ISO8859-1是有效的解决方案,代码如下: 
    response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) ); 
    在确保附件文件名都是简 体中文字的情况下,那么这个办法确实是最有效的,不用让客户逐个的升级IE。如果台湾同胞用,把gb2312改成big5就行。但现在的系统通常都加入了 国际化的支持,普遍使用UTF-8。如果文件名中又有简体中文字,又有繁体中文,还有日文。那么乱码便产生了。另外,在上Firefox (v1.0-en)下载也是乱码。 
    (3). 参看邮件中的中文附件名的形式,用outlook新建一个带有中文附件的邮件,然后看这个邮件的源代码,找到: 
    Content-Disposition: attachment; 
    filename="=?gb2312?B?0MK9qCDOxLG+zsS1tS50eHQ=?=" 
    用这个filename原理上就可以显示中文名附件,但是现在IE并不支持,Firefox是支持的。尝试使用 javamail 的MimeUtility.encode()方法来编码文件名,也就是编码成 =?gb2312?B?xxxxxxxx?= 这样的形式,并从 RFC1522 中找到对应的标准支持。 
    折中考虑,结合了一、二的方式,代码片断如下: 
    String fileName = URLEncoder.encode(atta.getFileName(), "UTF-8"); 
    /* 
    * see http://support.microsoft.com/default.aspx?kbid=816868 
    */ 
    if (fileName.length() > 150) { 
    String guessCharset = xxxx 
    //根据request的locale 得出可能的编码,中文操作系统通常是gb2312 
    fileName = new String(atta.getFileName().getBytes(guessCharset), "ISO8859-1"); 

    response.setHeader("Content-Disposition", "attachment; filename=" + fileName);编码转换的原理: 
    首先在源程序中将编码设置成GB2312字符编码,然后将源程序按Unicode编码转换成字节码加载到内存中(java加载到内存中的字节码都是Unicode编码),然后按GB2312编码获得中文字符串的字节数组,然后生成按ISO8859-1编码形式的Unicode字符串(这时的4个字节就变成了8个字节,高位字节补零),当在网络中传输时,因为setHeader方法中的字符只能按ISO8859-1传输,所以这时候就又把Unicode字符转换成了ISO8859-1的编码传到浏览器(就是把刚才高位补的零全去掉),这时浏览器接收到的ISO8859-1码的字符因为符合GB2312编码,所以就可以显示中文了。××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××