为什么是ISO8859-1而不是UTF-8?

zengjd 2013-06-09 10:18:02
使用struts2导出excel,
struts.xml文件中这样配置的文件名:

<action name="exportexcel" class="BeenChina.PM.Action.CaseNumberEfficiencyQuery">
<result name="success" type="stream">
...
<param name="contentDisposition">attachment;filename="${fileName}.xls"</param>
...
</result>
</action>


Action的fileName属性的get方法:

public String getFileName() throws UnsupportedEncodingException {
fileName=new String(fileName.getBytes(),"ISO8859-1");
return fileName;
}

public void setFileName(String fileName) throws UnsupportedEncodingException {
this.fileName=fileName;
}


现在的问题是:为什么要用ISO8859-1才可以使下载文件名不是乱码,而UTF-8却不行?
...全文
379 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengjd 2013-06-09
  • 打赏
  • 举报
回复
引用 7 楼 AA5279AA 的回复:
[quote=引用 6 楼 zengjd 的回复:] [quote=引用 5 楼 AA5279AA 的回复:] 这个是跟你tomcat配置的传输编码格式有关系的。 在tomcat的安装目录下找到 server.xml。 找到下面这段:看看你那里面设置的是什么。   <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
我的默认配置是这样的: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>[/quote] 没加的话默认就是ISO,你加上的话就等于修改了默认编码格式。比如加上UTF-8后那么就是UTF-8传输了。[/quote] 我发现用ISO8859-1,firfox和Chrome好用,IE却找不到文件了。
失落夏天 2013-06-09
  • 打赏
  • 举报
回复
引用 6 楼 zengjd 的回复:
[quote=引用 5 楼 AA5279AA 的回复:] 这个是跟你tomcat配置的传输编码格式有关系的。 在tomcat的安装目录下找到 server.xml。 找到下面这段:看看你那里面设置的是什么。   <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
我的默认配置是这样的: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>[/quote] 没加的话默认就是ISO,你加上的话就等于修改了默认编码格式。比如加上UTF-8后那么就是UTF-8传输了。
zengjd 2013-06-09
  • 打赏
  • 举报
回复
引用 5 楼 AA5279AA 的回复:
这个是跟你tomcat配置的传输编码格式有关系的。 在tomcat的安装目录下找到 server.xml。 找到下面这段:看看你那里面设置的是什么。   <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
我的默认配置是这样的: <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
失落夏天 2013-06-09
  • 打赏
  • 举报
回复
这个是跟你tomcat配置的传输编码格式有关系的。 在tomcat的安装目录下找到 server.xml。 找到下面这段:看看你那里面设置的是什么。   <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
「已注销」 2013-06-09
  • 打赏
  • 举报
回复
看不懂代码,能否加我QQ,我帮你解析
ZHOU西口 2013-06-09
  • 打赏
  • 举报
回复
iso-8859-1是JAVA网络传输使用的标准字符集
zengjd 2013-06-09
  • 打赏
  • 举报
回复
引用 1 楼 hhay7758 的回复:
这个还是看看自己的过滤器或者代码是不是有问题
这个跟过滤器有关系么?
蛋蛋の忧伤 2013-06-09
  • 打赏
  • 举报
回复
这个还是看看自己的过滤器或者代码是不是有问题
zengjd 2013-06-09
  • 打赏
  • 举报
回复
最终的解决办法是这样的:

public   static  String encode(HttpServletRequest request, String fileName)  throws  UnsupportedEncodingException {  
    String agent = request.getHeader("USER-AGENT" );  
    if( null  != agent && - 1  != agent.indexOf( "MSIE" )) {  
        return  URLEncoder.encode(fileName,  "UTF8" );  
    }
    else if  ( null  != agent && - 1  != agent.indexOf( "Firefox" )) {  
        return   "=?UTF-8?B?" +( new  String(Base64.encodeBase64(fileName.getBytes( "UTF-8" ))))+ "?=" ;  
    } 
    else if  ( null  != agent && - 1  != agent.indexOf( "Chrome" )) { 
        return  new String(fileName.getBytes(), "ISO8859-1");  		 		    	
    }  
    else{
        return fileName;
    }
}   
好用是好用了,不知道这样做合适不?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧