中文乱码问题
在表单中填写中文时,提交到服务器显示会产生乱码
浏览器提交至服务器的中文都是以字节的方式进行提交的,中文会被转换为字节再提交
产生乱码的原因:页面是以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");