java get post乱码处理_使用过滤器解决get&post请求中文乱码

tomcat8.0以上版本

get请求不会有中文乱码问题

post请求会有中文乱码问题

解决方案:设置request.setCharacterEncoding("utf-8");   这种设置只能在post请求中有效

tomact7以下版本(包括7)

get请求会有中文乱码问题

post请求会有中文乱码问题

解决方案:设置request.setCharacterEncoding("utf-8");

如何解决tomcat7中的get请求中文乱码问题?

两种方法:

1.在server.xml配置URIEncoding="UTF-8"

如果是项目开发完成了,打包成war包,放在tomcat7.0/webapps的时候,修改tomcat/conf/server.xml,在connector中添加 URIEncoding="UTD-8"

如果是开发阶段,在eclipse开发工具的server/tomcat7.0/server.xml配置,添加 URIEncoding="UTD-8"

2.把字符串转回字节码,然后再进行UTF-8编码

String username = request.getParameter("username");

//先还原ISO编码,再转成utf-8编码

username = new String(username.getBytes("ISO-8859-1"),"UTF-8");

对比:改配置server.xml的方式便捷

在server.xml配置URIEncoding是不可以解决post请求的中文乱码问题

post请求的中文乱码问题一定要使用request.setCharacterEncoding("utf-8");

如果有多个POST请求,不可能重复使用request.setCharacterEncoding("utf-8") 来解决

解决方案:写一个编码的过滤器MyEncoding拦截所有请求public class MyEnCodeingFilter implements Filter{

@Override

public void destroy() {}

@Override

public void init(FilterConfig filterConfig) throws ServletException {}

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

HttpServletRequest hsr = (HttpServletRequest) request;

if(hsr.getMethod().equalsIgnoreCase("get")) {//get

//解决get中文乱码

MyRequest myRequest = new MyRequest(hsr);

chain.doFilter(myRequest, response);//放行

}else {//post

//解决POST中文乱码

request.setCharacterEncoding("utf-8");

chain.doFilter(request, response);//放行

}

}

}

class MyRequest extends HttpServletRequestWrapper{

private HttpServletRequest request;

private boolean isEncoding = false;//是否已经utf-8编码

public MyRequest(HttpServletRequest request) {

super(request);

this.request = request;

}

@Override

public String getParameter(String name) {

return getParameterMap().get(name)[0];

}

@Override

public Map getParameterMap() {

Map map = request.getParameterMap();

if(isEncoding == true) {//已经UTF-8编码

return map;

}

//遍历value 改为UTF-8编码

for(Entry entry : map.entrySet()) {

//取数组值

String[] values = entry.getValue();

for(int i=0;i

try {

values[i] = new String(values[i].getBytes("ISO-8859-1"),"UTF-8");

} catch (UnsupportedEncodingException e) {

//编码不存在抛异常

e.printStackTrace();

}

}

}

isEncoding = true;

return map;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值