jsp亂碼發生的原因:
因爲tomcat 對post 方式處理參數採用的是iso-8895-1。
圖:
jsp亂碼發生的情況:
1,表單提交的時候,request.getParameter("");返回的爲亂碼
2,http://localhost/a.jsp?pram=中文,用request.getParameter("");返回的爲亂碼
前一種方式爲post 方式,request.setCharacterEncoding("UTF-8")對此種方式生效
後一種方式爲get方式,request.setCharacterEncoding("UTF-8")對此種方式無效
處理:
1,通過強轉String str=new String(request.getParameter().getBytes(“iso-8859-1”),”GB2312”);
2,修改tomcat 的server.xml來修改tomcat 處理字符的方式
3,js 中
var url = ".../servlet/Check_Unit_Name?unName=" + str.value;
url = encodeURI(url);
頁面2:
<% String unName = new String(request.getParameter("unName").getBytes("ISO-8859-1"),"UTF-8"); %>
or <a href="csdn2.jsp?name=<%=URLEncoder.encode("中國", "utf-8")%>">查看</a>
實例:
關於頁面<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<frame src='onlineAnaRightAction.do?method=list&parm=在線分析'...
頁面的的編碼也是utf-8,
修改tomcat 下的server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
加上紅色的,在後臺可以用request.getParameter("parm")得到中文
分析:
UTF-8 採用三個字節表示一個普通的漢字而 GBK 採用兩個,兩個 UTF-8 漢字是 6 個字節,
被強制轉成 GBK 的話就會變成三個字符。
出現這個問題的原因在於,URI 參數是使用 UTF-8 編碼的,而在 server.xml 中的 Connector
裏的 URIEncoding 屬性被改成“GBK”了。你把它改回來,改成 UTF-8 就行了,那樣使用
request.getParameter("name"); 可以直接得到正確的值。
如果你不想改動 server.xml 那就得轉碼,因爲 Tomcat 默認的 URI 傳輸採用 ISO-8859-1 的編碼。
new String(request.getParameter("name").getBytes("iso8859-1"), "utf-8")
參考:1,http://wenku.baidu.com/view/b052061d650e52ea55189813.html
2,http://topic.csdn.net/u/20080917/15/7a6a59cb-9950-499e-ad5d-421cd377f81b.html
3,http://topic.csdn.net/u/20080910/16/269beb9e-9fce-44a6-bc1c-f0fcf56f708f.html?seed=1632860754
4,http://blog.sina.com.cn/s/blog_491df4cd01000afp.html
5,http://hi.baidu.com/atell/blog/item/79bc641bb0a2d64b42a9ad05.html