关于url传参乱码的解决

在实际开发过程中,有很多情况会出现传中文参数会乱码的问题,实际上解决乱码参数就是将ISO-8859-1的字符编码转变成utf-8的字符编码(至少我是这样做的)。

以下是字符转码的片段,可作为一个类的工具使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//转换字符串方法
public static String encode(String target){
//定义临时Stirng参数
String tempTarget = null;
//当传入参数不为空时,执行if中的代码
if(StringUtils.isNotEmpty(target)){
try {
//转换格式
tempTarget = new String(target.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return tempTarget;
}

之后是一个字符编码的过滤器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class CharactorFilter implements Filter { //继承Filter类
//字符编码
String encoding=null;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if(encoding!=null){
//设置request字符编码
request.setCharacterEncoding(encoding);
//设置response字符编码
response.setContentType("text/html;charset="+encoding);
}
//传递给下一个过滤器
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
//获取初始化参数
encoding=filterConfig.getInitParameter("encoding");
}
public void destroy() {
// TODO Auto-generated method stub
encoding=null;
}
}

当然不用也行,可以在servlet中设置

1
2
3
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8")

需要注意的是,后两种方法仅对post有效,第一种可对get有效。