HttpServletResponse.getWriter().print乱码,request.getHeader乱码,解决方法

1、添加响应类型即可

//这句话的意思,是让浏览器用utf8来解析返回的数据
        response.setHeader("Content-type", "text/html;charset=UTF-8");

添加前后:

 

如果是header参数乱码,解决方法如下:

HTTP Header 的编解码

当客户端发起一个 HTTP 请求除了上面的 URL 外还可能会在 Header 中传递其它参数如 Cookie、redirectPath 等,这些用户设置的值很可能也会存在编码问题,Tomcat 对它们又是怎么解码的呢?

对 Header 中的项进行解码也是在调用 request.getHeader 是进行的,如果请求的 Header 项没有解码则调用 MessageBytes 的 toString 方法,这个方法将从 byte 到 char 的转化使用的默认编码也是 ISO-8859-1,而我们也不能设置 Header 的其它解码格式,所以如果你设置 Header 中有非 ASCII 字符解码肯定会有乱码。

我们在添加 Header 时也是同样的道理,不要在 Header 中传递非 ASCII 字符,如果一定要传递的话,我们可以先将这些字符用 org.apache.catalina.util.URLEncoder 编码然后再添加到 Header 中,这样在浏览器到服务器的传递过程中就不会丢失信息了,如果我们要访问这些项时再按照相应的字符集解码就好了。

 

 

附:URLEncoder 、URLDecoder 转码解码使用

传递参数,转码传递

String encodeStr = null;
try {
    encodeStr = URLEncoder.encode("aabb22中国", "utf-8");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
System.out.println("lgq处理后:" + encodeStr);

client.addHeader("headkey", encodeStr);//添加header请求参数方法

接收参数,解码显示

String name=(String) request.getHeader("headkey");
                String decodeStr = URLDecoder.decode(name, "utf-8");  

                
                System.out.println("hhhhhhhhhhhhhhhhh=====发 的==="+decodeStr);//获取header请求参数

结果:

hhhhhhhhhhhhhhhhh=====发 的===aabb22中国

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值