JSP的中文亂碼問題,有時好不容易看懂了,隔斷時間不用又忘了,先寫在這裡,便于日後檢視。
先確定頁面中文顯示正常,先确定将所有的html,jsp檔案都用UTF-8儲存(可以打開記事本,File | Save as 檢視檔案的編碼格式)
Introspection.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body>
<form name="form1" action="Introspection.jsp?hometown=湖北&所在地=深圳" method="post">
<p>姓名: <input type="text" name="name"></p>
<p>編号: <input type="text" name="number"></p>
<p>
<input type="submit" value="送出"><!--送出-->
<input type="reset" value="取消">
</p>
</form>
</body>
</html>
Introspection.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head></head>
<body>
<!-- <fmt:requestEncoding value="UTF-8" /> -->
<%
//目前發現,setCharacterEncoding()隻對Post資料有效.
//對于request.getParameter("param");
//param 若是從表單(Post)中來,則采用setCharacterEncoding()裡的編碼.
//param若是從Url(Get)中來,則采用預設編碼(通過設定Tomcat中conf/server.xml,或url位址中編碼,見後面);
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="myBean" scope="page" class="com.bean.SimpleBean"/>
<jsp:setProperty name="myBean" property="*" />
URL參數:<br>
Hometown: <%=request.getParameter("hometown")%> <br>
所在地: <%=request.getParameter("所在地")%>
<br><br>
Post參數:<br>
姓名 <jsp:getProperty name="myBean" property="name"/><br>
編号 <jsp:getProperty name="myBean" property="number"/>
</body>
</html>
SimpleBean.java
public class SimpleBean{
public SimpleBean() {
}
private String name;
private String number;
public void setName(String name) {
this.name = name;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public String getNumber() {
return number;
}
}
Url中取得的參數(get)編碼設定
兩種方法均可:
1) Tomcat安裝路徑conf/server.xml中加入URIEncoding="UTF-8"
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8" />
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="UTF-8" />
2)
action="Introspection.jsp?hometown=<%=URLEncoder.encode("湖北","UTF-8")%>"
解碼時直接用
java.net.URLDecoder.decode(request.getParameter("hometown"));
附: 漢字和UTF-8編碼之間轉換的js代碼
<table>
<tr>
<td height="30" align="center">請将您要<b style="color:red; background-color:#cccccc">轉換</b>的漢文複制到下框</td>
</tr>
<tr>
<td height="30" align="center"><textarea id="code" name="code" cols="60" rows="5"></textarea></td>
</tr>
<tr>
<td height="30" align="center"><input type="button" οnclick="encode(code,this)" value=" 轉 化 "></td>
</tr>
</table>
<script>
var mode="encode";
function encode(obj,btn){
if(mode=="encode"){
obj.value=obj.value.replace(/[^/u0000-/u00FF]/g, function($0){return escape($0).replace(/(%u)(/w{4})/gi,"&#x$2;")});
btn.value=" 還 原 ";
mode="decode";
}else{
obj.value=unescape(obj.value.replace(/&#x/g,'%u').replace(/;/g,''));
btn.value=" 轉 化 ";
mode="encode";
}
}
</script>