jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String te=request.getParameter("te");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<table> <TR><td>我是中文 </td></TR>
</table><br>-----------<%=te%>
<form action="Testservlet" method="get">
<table>
<tr>
<td>
<input name="te" type="text" value=""/>
<input name="su" type="submit" value="提交"/>
</td>
</tr>
</table>
</form>
</body>
<table>
<tr>
<td>
___${te}
</td>
</tr>
</table>
</html>
servlet:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
// response.setCharacterEncoding("UTF-8");
String te=request.getParameter("te");
// te=new String(te.getBytes("ISO-8859-1"),"GBK");
System.out.println(te+"/////");
request.setAttribute("te",te);
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
但是 jsp还是显示乱码啊?
jsp提交前的:
jsp提交后就乱码了:
------最佳解决方案--------------------------------------------------------
嗯,这问题写过滤器看好使不、
------其他解决方案--------------------------------------------------------
过滤器 可以实现, 或者 request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8"); 放在方法内头两行
------其他解决方案--------------------------------------------------------
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8"); // response.setCharacterEncoding("UTF-8");
String te=request.getParameter("te"); // te=new String(te.getBytes("ISO-8859-1"),"GBK");
System.out.println(te+"/////");
你这里只是设置了request.setCharacterEncoding为UTF8,但实际的数据却是GBK的,而你并没有对GBK转换成UTF8的数据,所以返回之后自然就乱了.浏览器检测到你实际返回的其实是GBK,由于浏览器的设置使用了自动选择编码,因此就自动切换成了GBK的编码,造成原来UTF8的数据变成乱码了.