(Servlet)解决一些中文乱码问题(包括Request和response的)+Response

中文乱码问题

在表单中填写中文时,提交到服务器显示会产生乱码
浏览器提交至服务器的中文都是以字节的方式进行提交的,中文会被转换为字节再提交
产生乱码的原因:页面是以UTF-8进行的提交,而tomcat服务器是以ISO-8859-1进行解码,所以会出现乱码
注意1:tomcat9解决了GET提交时候的中文乱码问题,但是其他的服务器以及POST提交没有解决

解决:使用setCharacterEncoding(“UTF-8”);
在doPost()方法里放入这行代码

setCharacterEncoding() 解决的是POET请求提交的字符编码问题,无法解决GET提交时的中文乱码问题
因为POST提交和GET提交时有区别的,POST提交是不在地址栏中显示的,而GET提交数据是通过地址栏往上提交的

解决2:如何解决GET提交的中文乱码问题
在服务器的配置文件下,server.xml 配置文件 Connector栏里加入 URIEncoding = “UTF-8”
这一种方法修改一次需要重启服务器

解决方案3:万能解决的方案

	//接收到的name,编码方式为ISO8859-1
		String names = req.getParameter("username");
		//将以ISO8859-1的组合而成字符串,打散成字节数组
		byte[] bytes = names.getBytes("ISO8859-1");
		//再将将打散的数组以UTF-8的格式组合起来
		String name = new String(bytes,"UTF-8");

Response

1.获取输出流对象

PrintWriter writer = resp.getWriter();

关于获取到的输出流对象的关闭问题,当响应结束时,输出流对象也就关闭了,一般不需要手动关闭,可能涉及到其他的servlet调用该输出流对象

2.往流对象里面输送数据的方法,记响应到浏览器进行显示

writer.append(String data)

writer.print();
writer.println();
writer.writer();

3.response的中文乱码问题,当响应给浏览器的数据为中文时,在浏览器端显示出来可能为乱码
解决方法1.使用方法response.setCharacterEncoding(“UTF-8”),这个方法需要在输出流对象创建之前就创建。但是实际操作后,发现还是有乱码问题

解决方法2:使用response.setContentType()

//设置响应的MIME类型(video/mp4,image/jpg)
//其中可以指定MIME的字符编码,即响应体的字符编码
resp.setContentType("text/html;charset=UTF-8");

解决方法3:分析方法1中为什么设置了setCharacterEncoding(“UTF-8”)还显示乱码的问题,因为setCharacterEncoding这个是设置MIME的字符编码类型
意思是:在使用setCharacterEncoding必须要有setContentType先设置MIME类型

resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值