天天看點

Tomcat中JSP中文亂碼的解決

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="&nbsp;轉&nbsp;&nbsp;化&nbsp;"></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>