日期:2014-05-18  浏览次数:20738 次

为什么是ISO8859-1而不是UTF-8?
使用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却不行?

------解决方案--------------------
iso-8859-1是JAVA网络传输使用的标准字符集
------解决方案--------------------
这个是跟你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"/>

------解决方案--------------------
引用:
Quote: 引用:

这个是跟你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"/>

没加的话默认就是ISO,你加上的话就等于修改了默认编码格式。比如加上UTF-8后那么就是UTF-8传输了。