一个用GB2312编码的程序S.jsp提交给用GB2312编码的程序T.jsp时会出现编码错误,修改T.jsp,使得编码正确。
输入四个汉字,结果如下:
S.jsp代码如下:
<%@ page language="java" import="java.util.*,java.io.*" pageEncoding="GB2312"
contentType="text/html;charset=GB2312"%>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<title>Encoding</title>
</head>
<body>
<h1>Encoding</h1>
<form action="T.jsp" method="post">
姓名:<input type="text" name="username" value="">
<input type="submit" value="提交">
</form>
</body>
</html>
T.jsp代码如下:
<%@ page language="java" pageEncoding="GB2312" import="java.util.*,java.io.*"
contentType="text/html;charset=GB2312"%>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<title>Decoding</title>
</head>
<body>
<h1>Decoding</h1>
<%
// 错误版本:
// String s = request.getParameter("username");
/*------------正确版本---------------*/
String s = request.getParameter("username");
byte[] bs = s.getBytes("iso-8859-1");
String s2 = new String(bs,"GB2312");
%>
<%=s%>
</body>
</html>
这样修改的原因:request.get得到的是默认采用ISO标准编码,需要先通过ISO标准解码,最后再进行GB2312解码才能得到原来的字符串。
解释出错画面中出现的字符个数。
GB2312编码中一个汉字占用了2个字节,而后来又运用ISO编码,ISO是单字节编码的,所以会把一个汉字的GB2312编码拆开成2个1字节的字符,所以最后可以看到8个字符。