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编码
<%@ 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编码
解决方案 »
- 我Action返回json数据java类可以输出 如何把json传给页面 我在线 谢谢了
- 如何打印等腰三角形
- 层式报表
- if(rs.getString(i)==null){map.put(k," ")}else{map.put(k,rs.getString(i))错在哪?
- JSP如何信息自动采集啊!求高手赐教
- 求助,有关画图的,Jfreechart的东西
- 请问下可否在自定义taglib里使用HttpServletRequest对象呢?
- JAVA初学,问一下SERVLET的问题!
- 求助!在tomcat中对servlet注册,到底该修改那个web.xml?
- 求教高手!如何解决jspSmartUpload实现下载时出现的乱码问题
- 求一本servlet/jsp教程
- 请问用ant打包和eclipse打包的区别
这是一篇介绍编码的文章,希望对你有用:
http://blog.csdn.net/mantou0611/article/details/8776895
不好意思,没表达清楚,rawName并不是“E4B8ADE69687”字符串,而是这个E4B8ADE69687二进制数据代表的字符串,你下面获得的数组也是这个字符串的字节数组,而不是 “中文”这个字符串的。