日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决url请求参数带中文时后台获取出现乱码问题

發布時間:2025/6/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决url请求参数带中文时后台获取出现乱码问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一種方法:
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文件可以利用<meta>標簽模擬請求消息頭

而tomcat服務器是默認采用iso-8859-1來對請求消息進行解碼的,如果前后不一就很容易出現亂碼問題.

如果是post請求只需要設置request.setCharacterEncoding()與請求消息編碼前的編碼方式一樣就可以.
如果是get請求,tomcat默認的是用iso-8859-1來進行解碼, 此時request.setCharacterEncoding()不起作用,可以在tomcat的server.xml的Connector元素的useBodyEncodingForURI="true"使得起作用

總結

以上是生活随笔為你收集整理的解决url请求参数带中文时后台获取出现乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。