1、在javaweb开发中,稍有不慎即会出现中文的乱码问题,好不头痛!我们首先分析一下乱码的机理:
(1)文字在计算机中全部以二进行形式进行存储,比如:‘a’的存储形式为:01100001,常见的字母数字标点符号已由ANSI进行标准化编码,即基本上不存在不同编码的问题。
(2)但汉字不同如“爱”在国标码(GB)下的编码形式:“1010100010101110”,但在UTF-8下则为“111001111000100010110001”,这样如果发送方以一种编码形式发送,接收方以另一种方式来解释,就必然会产生乱码的现象了!
2、浏览器中表单中的“中文”是以何种编码发送呢?,取决于浏览器的设置,如下图:
3、此设置是什么来决定的呢?,它是由JSP页面的如下代码来决定的:
1
|
<%@ page contentType="text/html; charset=UTF-8" %>
|
即表单的数据发送编码,可以由程序来控制!!!
4、我们控制了发送的编码,但我们如何能接收时来指定解码方案呢?这根据get和post请求有两种不同的方法:
(1)如果get请求,请使用如下:
1
2
3
4
5
6
|
public
void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
String uname=request.getParameter(
"uname"
);
//用UTF-8指定解码方案,对接收的uname进行解码
uname=
new
String(uname.getBytes(
"ISO-8859-1"
),
"UTF-8"
);
}
|
(2)如果是post请求,请使用如下:
1
2
3
4
5
6
|
public
void
doPost(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
//在request接收数据之前,指定其解码方案
request.setCharacterEncoding(
"UTF-8"
);
String uname=request.getParameter(
"uname"
);
}
|