jsp亂碼問題

 

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

 

 

發佈了97 篇原創文章 · 獲贊 3 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章