关于Servlet中乱码问题
- request是客户端向服务器端提交请求,即从浏览器中向你的服务器发送数据,response是你的服务器端向客户端响应。在两种相应中默认都是以(ISO8859-1)进行编码。
- 表单提交中有Post和Get方法两种,对应就有Post和Get两种请求
- Post请求出现问题的原因
, 当你从客户端向服务器端提交请求时,比如在浏览器中提交中文信息时, 浏览器发送的编码方式与Request对象的编码方式不一致, 如果不进行编码转换,就会出现乱码问题,解决Post方法出现乱码比较简单
解决方法 request.setCharacterEncoding(“UTF-8”)
但该方法只能解析请求体中的乱码方式。
4.
Get产生乱码的原因
Get方式用 request.setCharacterEncoding(“UTF-8”)已经不能解决问题,因为Get方式是的乱码问题不在请求体中而在请求头中,此时要解决问题应该进行编码解码操作,如图
编码: URLEncoder.encode(编码对象,”UTF-8”)
解码:String str1 = request.getParameter("编码对象");
String str2 = new String(str1.getBytes("ISO-8859-1"),"utf-8")
或者
String str2 = new String( request.getParameter("具体对象") .getBytes("ISO-8859-1"),"utf-8")
后期Get方式出现多个请求时可是一个监听器进行监听或者用方法进行封装
public class Translation
{
public static String String(String str) throws UnsupportedEncodingException
{
return new String(str.getBytes("ISO-8859-1"),"UTF-8");
}
}
Order class{
。。。
String stuname= Translation .String(request.getParameter("具体对象"));
。。。
}
5.
当要向浏览器输出所提交的中文数据时,这时应该在当前的Servlet中还要设置
response.setCharacterEncoding (“UTF-8”)
request. setCharacterEncoding(“UTF-8”);
以便告知浏览器打开的编码方式,只有这样才能在浏览器正确显示所需的中文。
6.
如果在当前Servlet中通过转发转向另一个Servlet,那么对响应头的设置,会保留到转发的其他Servlet中,比如在当前 Servlet设置 request.setCharacterEncoding(“UTF-8”),在下个 Servlet中会保留这个设定,此时如果想向浏览器输出中文,只需要在转发后的Servlet中设置response.setCharacterEncoding (“UTF-8”)或者 request. setCharacterEncoding(“UTF-8”);
7.
JDBC连接MySQL数据库,可能会出现乱码,所以要在连接之后加上如下的语句:
useUnicode=true&characterEncoding=UTF-8
说明:关于乱码问题经常遇到就这些,此文章还有没说明的乱码问题,仅供参考学习,不作其他用途。