response、request乱码问题

1.response乱码

1.1response的响应体设置文本
PrintWriter getWriter()
获得字符流,通过字符流的write(String s)方法可以将字符串设置到response 缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览 器端。

1.2关于设置中文的乱码问题

在这里插入图片描述

原因:response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过 response的 setCharacterEncoding(String charset) 设置response的编码

但我们发现客户端还是不能正常显示文字
原因:我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系 统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以 手动修改浏览器的编码是UTF-8。

我们还可以在代码中指定浏览器解析页面的编码方式,
通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8
response.setContentType(“text/html;charset=UTF-8”);

上面的代码不仅可以指定浏览器解析页面时的编码,同时也内含 setCharacterEncoding的功能,所以在实际开发中只要编写 response.setContentType(“text/html;charset=UTF-8”);就可以解决页面输出中文乱码问题。
在这里插入图片描述
在这里插入图片描述

2.request乱码

2.1解决request中文乱码的问题

一, request.setCharacterEncoding(charset);必须写在第一次使用request.getParameter()之前,

这样才能保证参数是按照已经设置的字符编码来获取。

二, response.setCharacterEncoding(charset);必须写在PrintWriter out =request.getWriter()之前,

这样才能保证out按照已经设置的字符编码来进行字符输出。

通过过滤器,我们可以保证在Servlet或JSP执行之前就设置好了请求和响应的字符编码。

但是这样并不能完全解决中文乱码问题:

1)对于post请求,无论是“获取参数环节”还是“输出环节"都是没问题的;

2)对于get请求,"输出环节"没有问题,但是"获取参数环节"依然出现中文乱码,所以在输出时直接将乱码输出了。

原因是post请求和get请求存放参数位置是不同的:

post方式参数存放在请求数据包的消息体中。

get方式参数存放在请求数据包的请求行的URI字段中,以?开始以param=value&parame2=value2的形式附加在URI字段之后。

而request.setCharacterEncoding(charset);只对消息体中的数据起作用,对于URI字段中的参数不起作用。

当使用request.setCharacterEncoding(charset);时,只能解决表单方法为POST的中文乱码情况,而方法为GET的依然为乱码。

解决GET乱码:

String str=new String(request.getParameter(“变量名”).getBytes(“ISO8859-1”),“UTF-8”);


解决post提交方式的乱码:
request.setCharacterEncoding("UTF-8");
解决get提交的方式的乱码:

在这里插入图片描述
parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值