今天在项目里碰到了非常纠结的问题——中文乱码问题。

原因是这样的,我打算通过JSF的一个FRAME控件LOAD一个jsp页面,该jsp页面根据GET参数得到文件的路径和文件名,从而可以将文件用二进制流输出给浏览器,以便下载。

但是由于我本地的文件名是中文的,所以出现了乱码问题。

简单点说,主要有以下几点:

1. 用java创建本地文件的中文文件名问题:

为了保证你的文件名不会乱码,在用java.io.File对象创建文件的时候,构造函数里的filename千万不要随意的转换成其他字符集的。就用默认的就好。也就是说

File f= new File(“中文文件.txt”);

足矣。这样,无论Windows用GBK编码文件名还是LINUX用UTF-8编码文件名,都可以在当前的系统中正常的查看。

2.向JSP传递中文参数的时候,如果你没有设定Tomcat的全局URIEncoding,一定要把中文参数进行URLEncoding

URLEncoder.encode(requestUrl,"UTF-8");

在被请求的页面,执行URLDecoder.decode(request.getParameter(“param”),"UTF-8");从而得到正确的中文。如果不能,可以尝试“new String(request.getParameter(“param”).getBytes("iso8859_1"),”UTF-8”)”

3.如果你在POST传参的时候发现出了问题,

可以在web.xml里面配置一个CharacterEncodingFillter。这个东西网上有很多代码,自己找吧。如果你用的是Spring,可以用它自带的org.springframework.web.filter.CharacterEncodingFilter

4.另一种解决参数乱码的办法就是修改TOMCAT的配置文件。

找到server.xml。把里面HTTP端口和HTTPS端口(如果你放开了)的Connector元素后面加上URIEncoding=”UTF-8”字样。


文章来源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!819.entry