JSP代码:<%@ page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>获取查询字符串中的中文字符</title>
</head>
<body>
<%
String rawQueryString = request.getQueryString();
out.println("原始查询字符串为: " + rawQueryString + "<hr/>");
// 使用utf-8解码请求字符串
String queryStr = URLDecoder.decode(rawQueryString, "utf-8");
out.println("解码后的查询字符串为: " + queryStr + "<hr />");String rawName = request.getParameter("name");
// 将查询字符串以iso-8859-1格式编码,返回编码后的字节数组
byte[] rawBytes = rawName.getBytes("iso-8859-1");
out.println("<b>iso-8859-1</b>: " + "<br />");
for (byte b : rawBytes) {
out.println(b + "<br />");
}
out.println("<hr />");
byte[] rawBytes2 = rawName.getBytes("utf-8");
out.println("<b>utf-8</b>: " + "<br />");
for (byte b : rawBytes2) {
out.println(b + "<br />");
}
out.println("<hr />");
%>
</body>
</html>
输出截图:
问题:
为什么在getBytes()时使用iso-8859-1格式就可以得到正确的字节表示(E4 => -28, B8 => -72 ...),而使用utf-8格式却得到12个字节?
输出截图中“原始查询字符串”显示中文参数被浏览器以UTF-8格式编码了,为什么我使用UTF-8格式调用getBytes()却得到不正确的结果呢?求高手解答,谢谢!
JSP编码

解决方案 »

  1.   

    两种编码方式不一样吧,getbyte得到的结果也不会一样。
    这是一篇介绍编码的文章,希望对你有用:
    http://blog.csdn.net/mantou0611/article/details/8776895
      

  2.   

    楼主你的代码是有问题的。queryStr 确实被你转码成了“中文”这个字符串,但是rawName并没有被转码,它代表的依然是"E4B8ADE69687"这个字符串。所以你获得的2个字节数组,并不是“中文”这个字符串的,而是"E4B8ADE69687”这个字符串的。ISO用单字节标识西欧语言码,所以你能够原样获得。UTF-8必须用2字节标识西欧语言码,所以你获得的是12个字节。
      

  3.   


    不好意思,没表达清楚,rawName并不是“E4B8ADE69687”字符串,而是这个E4B8ADE69687二进制数据代表的字符串,你下面获得的数组也是这个字符串的字节数组,而不是 “中文”这个字符串的。
      

  4.   

    你request里的参数是ios8859-1的,那你getBytes()的时候自然也是