解决url请求参数带中文时后台获取出现乱码问题
第一種方法:
var url = encodeURI(url);前端js先編碼一次,
后臺:String test=newString(request.getParameter("test").getBytes("iso8859-1"),"UTF-8");
先解碼還原成byte數(shù)組, 再用utf-8 解碼(另外也可以修改容器的配置文件, 讓容器在遇到 GET 提交的參數(shù)時,使用 UTF-8編碼. )
此時test已成功解碼不出現(xiàn)亂碼問題
第二種方法是:
前端JS兩次編碼:var url = encode(encodeURI(url));
后臺 String test=URLDecoder.decode(request.getParameter("test"),"UTF-8");
如果只進(jìn)行一次encodeURI,得到的是UTF-8形式的URL,服務(wù)器端通過request.getParameter()解碼查詢參數(shù)(通常是iso-8859-1)就會得到亂碼。
進(jìn)行兩次encodeURI,第一次編碼得到的是UTF-8形式的URL,第二次編碼得到的依然是UTF-8形式的URL,但是在效果上和第一次進(jìn)行一次UTF-8編碼(此時全部轉(zhuǎn)換為ASCII字符,沒有多字節(jié)字符了),第二次進(jìn)行一次iso-8859-1編碼是一樣的.
因?yàn)閷τ⑽淖址麃碚f, UTF-8編碼和ISO-8859-1編碼的結(jié)果相同。在服務(wù)器端,
首先通過request.getParameter()自動進(jìn)行第一次解碼(可能是gb2312,gbk,utf-8,iso-8859-1等字符集,對結(jié)果無影響)得到Ascii字符,然后再使用UTF-8進(jìn)行第二次解碼,通常使用Java.NET.URLDecoder("","UTF-8")方法。
附別人的講解:
客戶端發(fā)送的是請求頭,而參數(shù)會根據(jù)你當(dāng)前頁面的編碼方式進(jìn)行編碼之后發(fā)送給服務(wù)器
如果是utf-8,那就會根據(jù)utf-8進(jìn)行編碼發(fā)送給服務(wù)器.
如果是jsp文件可以用page指令的contentType屬性來設(shè)置顯示的編碼方式.
html文件可以利用<meta>標(biāo)簽?zāi)M請求消息頭
而tomcat服務(wù)器是默認(rèn)采用iso-8859-1來對請求消息進(jìn)行解碼的,如果前后不一就很容易出現(xiàn)亂碼問題.
如果是post請求只需要設(shè)置request.setCharacterEncoding()與請求消息編碼前的編碼方式一樣就可以.
如果是get請求,tomcat默認(rèn)的是用iso-8859-1來進(jìn)行解碼, 此時request.setCharacterEncoding()不起作用,可以在tomcat的server.xml的Connector元素的useBodyEncodingForURI="true"使得起作用
總結(jié)
以上是生活随笔為你收集整理的解决url请求参数带中文时后台获取出现乱码问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。