摘要:在服務器端,首先通過自動進行第一次解碼可能是等字符集對結果無影響得到字符,然后再使用進行第二次解碼,通常使用方法。
第一種方法:
var url = encodeURI(url);前端js先編碼一次,
后臺:String test=newString(request.getParameter("test").getBytes("iso8859-1"),"UTF-8");
先解碼還原成byte數組, 再用utf-8 解碼(另外也可以修改容器的配置文件, 讓容器在遇到 GET 提交的參數時,使用 UTF-8編碼. )
此時test已成功解碼不出現亂碼問題
第二種方法是:
前端JS兩次編碼:var url = encode(encodeURI(url));
后臺 String test=URLDecoder.decode(request.getParameter("test"),"UTF-8");
如果只進行一次encodeURI,得到的是UTF-8形式的URL,服務器端通過request.getParameter()解碼查詢參數(通常是iso-8859-1)就會得到亂碼。
進行兩次encodeURI,第一次編碼得到的是UTF-8形式的URL,第二次編碼得到的依然是UTF-8形式的URL,但是在效果上和第一次進行一次UTF-8編碼(此時全部轉換為ASCII字符,沒有多字節字符了),第二次進行一次iso-8859-1編碼是一樣的.
因為對英文字符來說, UTF-8編碼和ISO-8859-1編碼的結果相同。在服務器端,
首先通過request.getParameter()自動進行第一次解碼(可能是gb2312,gbk,utf-8,iso-8859-1等字符集,對結果無影響)得到Ascii字符,然后再使用UTF-8進行第二次解碼,通常使用Java.NET.URLDecoder("","UTF-8")方法。
附別人的講解:
客戶端發送的是請求頭,而參數會根據你當前頁面的編碼方式進行編碼之后發送給服務器
如果是utf-8,那就會根據utf-8進行編碼發送給服務器.
如果是jsp文件可以用page指令的contentType屬性來設置顯示的編碼方式.
html文件可以利用標簽模擬請求消息頭
而tomcat服務器是默認采用iso-8859-1來對請求消息進行解碼的,如果前后不一就很容易出現亂碼問題.
如果是post請求只需要設置request.setCharacterEncoding()與請求消息編碼前的編碼方式一樣就可以.
如果是get請求,tomcat默認的是用iso-8859-1來進行解碼, 此時request.setCharacterEncoding()不起作用,可以在tomcat的server.xml的Connector元素的useBodyEncodingForURI="true"使得起作用
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66850.html
摘要:瀏覽器的中文數據提交給服務器,以編碼對中文編碼,當我在讀取數據的時候,拿到的當然是亂碼。接下來使用方式傳遞中文數據,把表單的方式改成即可當我們訪問的時候,又出現亂碼了于是我按照上面的方式,把對象設置編碼為試試結果還是亂碼。 什么是HttpServletRequest HttpServletRequest對象代表客戶端的請求,當客戶端通過HTTP協議訪問服務器時,HTTP請求頭中的所有信...
摘要:性能會有所降低一點內容,刷新整個頁面用戶的操作頁面會中斷整個頁面被刷新了就是能夠做到局部刷新三對象是中最重要的一個對象。頭信息已經接收,響應數據尚未接收。 一、什么是Ajax Ajax(Asynchronous JavaScript and XML) 異步JavaScript和XML Ajax實際上是下面這幾種技術的融合: (1)XHTML和CSS的基于標準的表示技術 (2)DOM進...
閱讀 826·2019-08-30 14:05
閱讀 1718·2019-08-30 11:08
閱讀 3219·2019-08-29 15:41
閱讀 3595·2019-08-23 18:31
閱讀 1517·2019-08-23 18:29
閱讀 551·2019-08-23 14:51
閱讀 2109·2019-08-23 13:53
閱讀 2130·2019-08-23 13:02