昨天,我所做的项目中,涉及到把数据库的数据导出到Excel文件中的操作,并提供一个下载-保存的文件保存对话框给用户,默认的文件名从数据库中取得。开发环境为Eclipse3.2+MyEclipse5.0+oracl9i+tomcat5.5,使用Struts+Hibernate框架开发。文件名在数据库中显示一切正常,但在文件保存对话框中变成了乱码,经过了和同事以及项目负责人的研究和讨论后,终于解决了这个问题,解决方法:
先将文件名称的字符编码转换为UTF-8,在进行相关操作。
部分代码如下
import java.net.URLEncoder;
...
OfficeFunction of = new OfficeFunction();//操作Office文件的类,类中定义了包括导出Excel文件等方法
strFileName= URLEncoder.encode(strFileName.trim(),"UTF-8");//将文件名称的字符编码转换为UTF-8;
of.InitOutputStream(strFileName,response);//和response关联;
of.expordExcel(of.getOutPutStream(), strTitle, strHeadLine, strContent);//导出Excel文件,弹出保存对话框;
...
这时,中文名称能正确显示,但取出的名称后面却多了N个“+++++++”;将数据用字符串的trim()方法对文件名进行去前后空白操作,再将文件名称打印到控制端,仍显示的文件名称后面是一串的空格符,不知为什么会这样,最后,用Sring的replace方法
strFileName = strFileName.replace(" ","");
后终于可以解决了。