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

解决中文乱码的常见问题
荐于经常看到朋友说哪里出现中文乱码了,菜鸟我以自己在项目经常遇到的整理了一下,有以下几个方面:

1.最基本的在jsp页面上要把pageEncoding设置为中文,如: <%@ page language="java" pageEncoding="GBK"%> 

2.对于表单的doPost()提交,也会出现中文出现乱码,可以在servlet里设置如下:request.setCharacterEncoding("GBK"),response.setCharacterEncoding("GBK"),不过此方法在每个servlet都要设置,很麻烦,建议写个过滤器设置。可以参考以下: 
    public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException

HttpServletRequest request_1 = (HttpServletRequest) request; 
HttpServletResponse response_1 = (HttpServletResponse) response; 

// 转换编码,并且加上去缓存 
request_1.setCharacterEncoding("GBK"); 
response_1.setCharacterEncoding("GBK"); 
chain.doFilter(request, response); 


3、第三种就是 如果用doGet()提交,后面跟的参数如果也是中文,这个解决方法可以在tomcat或JBoss的配置文件里面配置,以tomcat为例: 
     <Connector port="8099" maxHttpHeaderSize="8192" 
  maxThreads="150" minSpareThreads="25" maxSpareThreads="75" 
  enableLookups="false" redirectPort="8443" acceptCount="100" 
  connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/> 
  在这里面最后加上URIEncoding="GBK". 
4、ajax也会产生乱码问题,这个问题可以在tomcat的配置那里解决。 

5、文件上传时文件名也会出现乱码。 
可以用此方法paramMap.put(fi.getFieldName(), new String(fi.getString().getBytes("ISO-8859-1"),"GBK")); 

知识浅陋,若有错误,请大虾指正或其他更多的补充 。

------解决方案--------------------
支持下
------解决方案--------------------
很好,我认为第二种和第三种,作用基本一样,对post,get都有效。
------解决方案--------------------
还有,如果用URL后面带参数的方式发送中文呢,最好用encodeURIComponent()做编码。
------解决方案--------------------
mark一下
------解决方案--------------------
探讨
引用:
还有,如果用URL后面带参数的方式发送中文呢,最好用encodeURIComponent()做编码。

嗯,很好,这个问题可以写个单独写个工具类,如:

Java code

import java.io.UnsupportedEncodingException;

/**
* 将编码转成中文编码GBK
* @author hejinlong
* 返回中文字符串
*/
public class tools {

/**
* @param str
* 需要转换的字符串
* @return


------解决方案--------------------
UP.收藏了.
------解决方案--------------------
其实还有一种方法 就是在SSH开发中 可以在struts中的Form类中添加个方法就行了 更简单:
//处理向数据库插入数据时出现乱码的情况
public void reset(ActionMapping arg0, HttpServletRequest arg1) {
try{
arg1.setCharacterEncoding("gbk");
}catch(Exception e){
e.printStackTrace();
}
}
------解决方案--------------------
收藏
------解决方案--------------------
总结得不错
不过一般用filter来处理
写在web.xml里面
------解决方案--------------------

------解决方案--------------------
UP,用过滤器是比较方便的!
------解决方案--------------------
[code=Java][/code]
package com.base;

import java.io.UnsupportedEncodingException;

import javax.servlet.h