当前位置:首页 > 开发 > Web前端 > 前端 > 正文

IE7中附件链接名称过长导致乱码

发表于: 2009-02-16   作者:Dead_knight   来源:转载   浏览次数:
摘要: 使用IE7浏览器,打开附件链接时,超过15个汉字会出现9D%这样的乱码文件名,而且下载后的文件无法打开。 如下代码当stepFile_names[i]长度超过15个汉字时在IE6是正常的,在IE7下会出现9D%乱码,且附件无法打开: <a href=’<%=request.getContextPath()%>/<%=stepFile_paths[i]%>’
使用IE7浏览器,打开附件链接时,超过15个汉字会出现9D%这样的乱码文件名,而且下载后的文件无法打开。
如下代码当stepFile_names[i]长度超过15个汉字时在IE6是正常的,在IE7下会出现9D%乱码,且附件无法打开:
<a href=’<%=request.getContextPath()%>/<%=stepFile_paths[i]%>’ target=’_tab’><%=stepFile_names[i]%></a>

对此问题,由于无法缩减文件名称,故采用输出流办法解决。
即将上面代码进行判断
<%
for ( int i = 0; i < stepFile_paths.length; i++ )
{
String fileName = URLEncoder.encode(stepFile_names[i].substring(0, stepFile_names[i].lastIndexOf(".")), "UTF-8");
if (fileName.length() > 150) 
{
%> 
	<a href="<%=request.getContextPath() %>/producetask/download/Download.jsp?fileUrl=<%=stepFile_paths[i] %>&fileName=<%=stepFile_names[i] %>" target="_tab"><%=stepFile_names[i]%></a>
<%
}
else
{
%>
	<a href='<%=request.getContextPath() %>/<%=stepFile_paths[i].replaceAll("/frameweb/|/newframeweb/","/")%>' target="_tab"><%=stepFile_names[i]%></a>
<%
}

从代码上可以看出,当文件名长度超出限制时,通过Download.jsp进行处理(由于UTF-8编码的汉字使用9个字节进行存储,而15*9<150<16*9,故使用150进行判断)
在Download.jsp中,通过将附件读取至输出流中,返回至客户端,以达到解决问题的目的。代码如下:
	OutputStream output=response.getOutputStream();
	response.reset();
	response.setContentType(Download.getContentType(fileName.substring(fileName.lastIndexOf(".") + 1)) + ";charset=GBK");
	String s = fileName.substring(0, fileName.lastIndexOf("."));
	String name = new String(s.getBytes("GBK"), "ISO8859_1") + fileName.substring(fileName.lastIndexOf("."));
	response.addHeader("Content-Disposition", "inline;filename=" + name);
	Download.copyFile(rootPath + fileUrl, output);

copyFile方法主要是将rootPath+fileUrl路径的文件内容读取至output输出流中。
至此,该问题解决,但以上解决办法会增加内存负担,因为文件内容在客户端打开而未下载时,其一直保存在内存中。考虑该问题出现几率较小,且未超出限定长度时不会采用该处理方式。

IE7中附件链接名称过长导致乱码

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
由于之前增加了解析postgresQL消息的功能,为打印每个消息的内容,在另外一个protooutput.h的文件中
一、myEclipse 复制后修改名称,访问不到项目 这是因为,你只是改了项目的名称,而没有改 下面是解
网站首页和招聘网页面出现很卡,几乎打不开的状况。 查看下 fcgi 情况 完蛋了。跑了那么多个 停掉广
最近偶发情况虾遇到字符乱码问题如下: 最开始以为是jython的bug,后来定位发现是dboss readLine的
以下颜色的名称可直接用于 CSS 和 MXML。 不过,要想在自己的组件中享用这种语法蜜糖,得在组件的样
如下是自己在做一些开发的时候遇上的问题,想必电脑前的你也遇上了吧,赶紧拿笔记下吧。 遇到了几个
1、修改的相关文件 2、AttachmentManager.java新增方法 /** * 根据punid, 返回一个附件 * * @param
链接按钮: 编辑按钮:(对应笔头) <asp:HyperLinkField Text="<img src='../images/edit.gi
1 软链接 linux中软链接理解成window中的快捷方式。创建软链接的命令 ln -s 源文文件或目录 目标文
一朋友说要修改tomcat的session cookie name,我翻了一下tomcat各个版本的源码(tomcat4已经没人用
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号