日期:2014-05-16  浏览次数:20696 次

万恶的中文乱码问题ajax提交、单个文件下载(文件名)和打包下载压缩包中文件文件名乱码
今天一下午都在于乱码对抗:just 记录一下 方便自己以备后用。

首先是ajax方式上传采用的get请求方式,尝试了下面两种解决方案:

1、出现乱码 修改tomcat配置文件 设置 <Connector connectionTimeout="20000" port="8899" protocol="HTTP/1.1" redirectPort="8443" URIEncoding ="UTF-8"/>
这种方法需要修改中间件,可能会对其他应用有影响,同时服务器可能是其他中间件

2、采用encodeURI方法
js代码中 var queryString = $('#tName').val();queryString = encodeURI(queryString);queryString = encodeURI(queryString);var str = '?tName=' + queryString+ '&tUrl=' + $('#tUrl').val();这里要encodeURI两次

java代码中 tName= URLDecoder.decode(tName,"UTF-8");//解决中文乱码问题
据说这是万能的,这回我可要记住了。

3、就是spring的字符集过滤器 居然不起作用
  <filter>
  <filter-name>Spring character encoding filter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>
  </filter>
 
  <filter-mapping>
  <filter-name>Spring character encoding filter</filter-name>
  <url-pattern>/*</url-pattern>
  </filter-mapping>


其次是系统中用到了文件下载(Struts2),有两种乱码的情况,

1、单个文件下载,文件名字出现乱码,这个问题碰到过,通过
fileName = new String(fileName.getBytes("GBK"), "ISO-8859-1");// 解决中文文件名乱码问题
解决,但是今天有点晕,居然一直在纠结inputStream...浪费了好多时间

2、多文件下载,压缩包中含有中文名称文件名都是乱码,采用的是ZipOutputStream打包,这通过
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(f));
out.setEncoding("gbk");// 解決压缩包乱码
就可以简单解决。