在傳遞參數的時候,如果有中文,那么可以先轉碼再轉,之后再解碼。URLEncoder.encode與URLDecoder.docode傳遞中文參數編碼與解碼
使用java.net.URLEncoder.encode()可以對要傳遞的中文進行編碼
a.在傳參數之前先把參數進行轉碼:java.net.URLEncoder.encode(param);
取值時用語句java.net.URLDecoder.decode(param);再轉回中文
b.在你的Tomcat目錄-->conf目錄-->server.xml里找出這段:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" <!--在里邊加上這個參數--> URIEncoding="gb2312" />
前端的寫法:
在傳參的時候編碼:
<%
String urls = "http://api.simsimi.com/request.p?key="+key+"&lc="+lc+"&ft=1.0&text="+java.net.URLEncoder.encode(text,"utf-8");
response.sendRedirect("talk.jsp?ans="+java.net.URLEncoder.encode(ans)+"&text="+java.net.URLEncoder.encode(text) );
%>
在獲取的時候解碼:
<%
request.setCharacterEncoding("utf-8");
String ans=new String(request.getParameter("ans").getBytes("8859_1"));
String text=new String(request.getParameter("text").getBytes("8859_1"));
%>
或者
<%@ page contentType="text/html;charset=gb2312" %>
<a href="ds.jsp?url=<%=java.net.URLEncoder.encode("編碼的是這里","GB2312")%>">點擊這里</a>
使用java.net.URLDecoder.decode()在后面對傳遞的參數進行解碼,一定要搭配使用哦
<%
if(request.getParameter("url")!=null) { str=request.getParameter("url"); str=java.net.URLDecoder.decode(str,"GB2312"); str=new String(str.getBytes("ISO-8859-1")); out.print(str); } %>
若,字符編碼為utf-8也可以實現.或者在此段代碼中,不寫出字符編碼也可以(只寫一個參數)。
在jsp中對中文進行了編碼的時候用的是UTF-8的編碼方式,而在servlet中調用request.getParameter();方法的時候使用服務器指定的編碼格式自動解碼一次,所以前台編碼一次后台解碼一次而解碼和編碼的方式不同可能會造成亂碼的出現。
ajax寫法:
$.ajax({ url:'<%=request.getContextPath()%>/cargroup-ajax/searchCargroupName.action', async:false, data:{ cargroupName:encodeURI(cargroupName) //中文 }, type:'post', dataType:'json', success:function(data){ if(data=="true"){ if(flag!="form"){ alert("該名稱可用!"); } checkRepeat = true; }else{ if(flag!="form"){ alert("該名稱不可用!"); } } } });
后台java:
cargroupName = URLDecoder.decode(request.getParameter("cargroupName"), "utf-8");
參考資料:
http://www.2cto.com/kf/201310/249736.html
