学习笔记
乱码问题
浏览器的编码格式由当前打开的页面决定,
如果页面中设置了编码格式那么浏览器就使用这个,
如果没有,浏览器使用系统默认的编码
服务器编码格式和解码格式默认就是ISO-8859-1
浏览器的解码格式由当前打开的页面决定
常见的乱码情况
1.浏览器(编码)-请求—>服务器(解码)
2.服务器(编码)-响应—>浏览器(解码)
解决思路
统一编码和解码就可以解决乱码问题
1、get请求乱码
假设浏览器是UTF-8,服务器也要使用UTF-8解码
解决:修改服务器的配置文件,告诉他读取请求参数时使用UTF-8解码
在servers项目中server.xml的中的 给connector标签添加属性 URIEncoding=“UTF-8”
<Connector connectionTimeout="20000" maxHttpHeaderSize="102400" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
此方法只解决了get请求乱码(告诉服务器在解析请求首行时使用UTF-8解析数据)
此方法针对整个工作空间的所有项目,解决了所有的get请求乱码
2、post请求乱码
解决:在使用request对象之前设置解码格式
request.setCharacterEncoding("UTF-8");
此解决方法只针对当前的servlet,每个需要解决post请求乱码的servlet中都需要设置解码格式
3、响应乱码
问题原因:response直接使用ISO-8859-1编码然后交给浏览器
方法1:~~在使用response对象之前设置编码格式
response.setCharacterEncoding(“UTF-8”);只能让字符串不乱码,浏览器还是不知道如何解析页面字符串 ~~
所以方法1并不能解决问题
方法2:在使用response对象之前设置一个响应头,告诉浏览器如何解析页面,告诉response对象如何读取字符串
response.setHeader("Content-Type", "text/html;charset=Utf-8");//设置响应头
response.setContentType("text/html;charset=Utf-8");