解决中文乱码的常见问题

fafuhefan 2009-04-26 10:35:29
加精
荐于经常看到朋友说哪里出现中文乱码了,菜鸟我以自己在项目经常遇到的整理了一下,有以下几个方面:

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"));

知识浅陋,若有错误,请大虾指正或其他更多的补充 。
...全文
4150 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
dunjianwei 2011-07-23
  • 打赏
  • 举报
回复
up 顶一下
痛彻心扉 2011-07-19
  • 打赏
  • 举报
回复
挺好 顶
shinjisun 2011-07-19
  • 打赏
  • 举报
回复
这个要收藏,经常会碰到
Rolis 2011-07-04
  • 打赏
  • 举报
回复
UP Up UP
IT330 2011-07-04
  • 打赏
  • 举报
回复
高手过招就是不一样!学习了!
Sevencrimes 2011-07-03
  • 打赏
  • 举报
回复
可以写个过滤器配置到XML中解决,而且可以通过XML动态的来改变,比如:UTF-8,GBK

package com.accphr.util;

import java.io.IOException;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

/**
*
* 字符集过滤器
*
*/
public class CharacterEncodingFilter implements Filter {

/* 设置的字符集 */
private String encoding = "UTF-8";

public void destroy() {
}

@SuppressWarnings("unchecked")
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 处理服务器到客户端
response.setContentType("text/html;charset=" + this.encoding);

// 处理客户端到服务器
HttpServletRequest req = (HttpServletRequest) request;
String s = req.getMethod();// 获得表单提交方式
if (s.equalsIgnoreCase("post")) {
req.setCharacterEncoding(this.encoding);
} else if (s.equalsIgnoreCase("get")) {
Map<String, String[]> map = (Map<String, String[]>) req
.getParameterMap();
Iterator<String[]> it = map.values().iterator();
while (it.hasNext()) {
String[] paramValues = it.next();
for (int i = 0; i < paramValues.length; i++) {
byte[] b = paramValues[i].getBytes("ISO-8859-1");
paramValues[i] = new String(b, this.encoding);
}
}
}
chain.doFilter(request, response);
}

public void init(FilterConfig config) throws ServletException {
String encoding = config.getInitParameter("encoding");
if (StringUtils.isNotBlank(encoding)) {
this.encoding = StringUtils.trimToBlank(encoding);
}
}

}




S_enjoin 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 lvgongyi 的回复:]


package com.base;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.ap……
[/Quote]

很好
bbgzk 2011-04-16
  • 打赏
  • 举报
回复
xing8831925 2011-04-12
  • 打赏
  • 举报
回复
支持。很实用
peng3226754 2010-08-11
  • 打赏
  • 举报
回复
1.最基本的在jsp页面上要把pageEncoding设置为中文,如: <%@ page language="java" pageEncoding="GBK"%>

这个东西,经常忘记写! 老外的东西 不求好用!
yinlanyihao 2010-08-04
  • 打赏
  • 举报
回复
总结的不错
haizitou00 2010-08-03
  • 打赏
  • 举报
回复
学习。
山城忙碌人 2010-07-30
  • 打赏
  • 举报
回复
encodeURI
我想问下,大家在用这个解决乱码的时候,对特殊符号(@#$%^&*)怎么处理的,如果字符串中带有这个字符,哪么在这些字符后的字符串会传不过去,大家是怎么解决这个问题的。。
山城忙碌人 2010-07-30
  • 打赏
  • 举报
回复
encodeURI
我想问下,大家在用这个解决乱码的时候,对特殊符号(@#$%^&*)怎么处理的,如果字符串中带有这个字符,哪么在这些字符后的字符串会传不过去,大家是怎么解决这个问题的。。
lianghua19 2010-03-30
  • 打赏
  • 举报
回复
.......看不懂
rainbow560 2009-05-07
  • 打赏
  • 举报
回复
mark 都是常见问题,比较到位
「已注销」 2009-05-07
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 kzccomputer 的回复:]
我采用的是GB2312
[/Quote]我采用的是GBK
kzccomputer 2009-05-07
  • 打赏
  • 举报
回复
我采用的是GB2312
fafuhefan 2009-05-06
  • 打赏
  • 举报
回复
顶起来,还好多人在问这个老问题.
gggggb 2009-05-06
  • 打赏
  • 举报
回复
不错,收集的很全哈
加载更多回复(38)

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧