解决web项目开发中常见的中文乱码问题

经常在论坛中看到朋友遇到中文乱码的问题而不知所措,本人以自己在项目中常遇到的中文乱码问题及解决方法,小结一下,希望能对朋友有所帮助,如有不足,请指正。

总的归纳有以下几个方面:

一、在表单正常提交后,页面显示出乱码。

解决方法:

1、如果是直接jsp页面提交到别外一个jsp页面,或jsp提交到servlet,可以在jsp或serlet的doPost()或doGet()方法设置编码转换,将请求后的数据转成中文,并在输出时也设置为中文如:

request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");

2、设置过滤器(推荐方法):

写一个过滤器类,并且建议写在静态类,方便调用,如下:


[java]view plaincopyprint?
/**
* 全局编码过滤器,
*
* @author fafuhefan
*
*/
publicclassEncodingFilterimplementsFilter {
String encoding ="GBK";

publicvoiddestroy() {

}

publicvoiddoFilter(ServletRequest request, ServletResponse response,
FilterChain chain)throwsIOException, ServletException {

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


request_1.setCharacterEncoding(encoding);
response_1.setCharacterEncoding(encoding);
chain.doFilter(request, response);

}

publicvoidinit(FilterConfig config)throwsServletException {

String str = config.getInitParameter("encoding");
if(str !=null&& str.length() >0) {
encoding = str;
}
}

}
/**
* 全局编码过滤器,
*
* @author fafuhefan
*
*/
public class EncodingFilter implements Filter {
String encoding = "GBK";

public void destroy() {

}

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(encoding);
response_1.setCharacterEncoding(encoding);
chain.doFilter(request, response);

}

public void init(FilterConfig config) throws ServletException {

String str = config.getInitParameter("encoding");
if (str != null && str.length() > 0) {
encoding = str;
}
}

}

并在web.xml作如下配置:

<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.crm.filter.EncodingFilter</filter-class>(说明:此为类路径)
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

二、如果为url后在跟的参数为中文,如:xxx.do?name=你好,或采用自动跳转链接时,后面跟的提示信息含有中文。

解决方法:

1、可以写个类,进行转换如:


[java]view plaincopyprint?
/**
* 将编码转成中文编码GBK
* @author fafuhefan
* 返回中文字符串
*/
publicclasstools {

/**
* @param str
* 需要转换的字符串
* @return
* 中文字符串
*/
publicstaticString toGBK(String str) {
try{
str = java.net.URLEncoder.encode(str,"gb2312");
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}
returnstr;
}

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

/**
* @param str
* 需要转换的字符串
* @return
* 中文字符串
*/
public static String toGBK(String str) {
try {
str = java.net.URLEncoder.encode(str, "gb2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return str;
}

}


2、在tomcat的server.xml做以下配置:

<Connector port="8099" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>
三、ajax提交出现在乱码。

解决方法:以上二种方法基本可以解决。

四、文件上传时文件名出现乱码。

解决方法:在上传时,先对文件名进行编码设置,可以采用此方法:

例:paramMap.put(fi.getFieldName(), new String(fi.getString().getBytes("ISO-8859-1"),"GBK"));

五、有时数据库插入数据时出现的乱码:

解决方法:

可以在struts中的Form类中添加个方法就行

public void reset(ActionMapping arg0, HttpServletRequest arg1) {
try{
arg1.setCharacterEncoding("gbk");
}catch(Exception e){
e.printStackTrace();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值