1、在javaweb开发中,稍有不慎即会出现中文的乱码问题,好不头痛!我们首先分析一下乱码的机理:

(1)文字在计算机中全部以二进行形式进行存储,比如:‘a’的存储形式为:01100001,常见的字母数字标点符号已由ANSI进行标准化编码,即基本上不存在不同编码的问题。

(2)但汉字不同如“爱”在国标码(GB)下的编码形式:“1010100010101110”,但在UTF-8下则为“111001111000100010110001”,这样如果发送方以一种编码形式发送,接收方以另一种方式来解释,就必然会产生乱码的现象了!

2、浏览器中表单中的“中文”是以何种编码发送呢?,取决于浏览器的设置,如下图:

144226587.png

3、此设置是什么来决定的呢?,它是由JSP页面的如下代码来决定的:

<%@ page contentType="text/html; charset=UTF-8" %>

即表单的数据发送编码,可以由程序来控制!!!

4、我们控制了发送的编码,但我们如何能接收时来指定解码方案呢?这根据get和post请求有两种不同的方法:

(1)如果get请求,请使用如下:

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请求,请使用如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//在request接收数据之前,指定其解码方案
request.setCharacterEncoding("UTF-8");
String uname=request.getParameter("uname");
}

5、如此这般,百用百灵!!!