Servlet中文参数乱码问题
1.get/post两种请求方式
1)get请求a.哪一些情况下,浏览器会发送get请求
a1.直接输入某个地址
a2.点击链接
a3.表单默认提交的方式
b.特点
b1. 会将请求参数添加到请求资源路径的后面,只能提交少量的数据。
b2.会将请求参数显示在浏览器地址栏,不安全。
注:比如路由器就会记录包含了请求参数的请求地址。
2)post请求
a.哪一些情况下,浏览器会发送post请求
设置表单method="post"
b.特点
b1.会将请求参数添加到实体内容里面,可以提交大量的数据。
b2.不会将请求参数显示在浏览器地址栏,相对安全
注:不会将请求参数加密。
2.servlet输出中文
(1)为什么会有乱码out.println方法在默认情况下,会使用"iso-8859-1"来编码。
(2)如何解决
response.setContentType("text/html;charset=utf-8");
注意:
a,charset=utf-8:用来指定编码格式,只要支持中文即可,比如:gbk
b,作用有两个
第一:生产一个content-type消息头,告诉浏览器返回的数据类型和编码格式.
第二:服务器在输出时,会使用指定的编码格式进行编码.
3.表单包含有中文参数值
(1)为什么会有乱码因为当提交表单时,浏览器会对表单中的数据进行编码(会使用打开表单时的编码格式进行编码),而服务器默认情况下,会使用iso-8859-1去解码,所以,会产生乱码问题。
编码方式不一致时,就会出现乱码。
(2)如何解决
解决方式1:
step1,先保证表单所在页面按照指定的编码格式打开。使用<meta http-equiv="content-type" content="text/html;charset=utf-8">
step2,调用request.setCharacterEncoding("utf-8");意思是告诉服务器,使用指定的编码格式进行解码.
注:该方法只适用于post请求.
解决方式2:
step1,同上
step2,使用new String(str.getBytes("iso-8859-1"),"utf-8"); 注:先还原得到浏览器发送过来的字节数组,然后使用正确的字符集来解码。
4.编解码问题
(1)java语言在内存当中,会使用"unicode"编码格式(字符集)来保存字符。
(2)编码:把unicode这种编码格式对应的字节数组转换成某种本地编码的格式(比如 gbk)对应的字节数组。
unicode ---> gbk
(3)解码:把某种本地编码格式的字节数组转换成unicode这种编码格式对应的字节数组。
(4)如果servlet要输出中文,需要调用response.setContentType(“text/html;charset=utf-8”);
(5)如果表单有中文参数值,也需要注意编码问题