关于HTTP GET请求的url中文参数编码
場(chǎng)景:前端用JS構(gòu)造了一個(gè)GET請(qǐng)求,攜帶了一個(gè)中文的參數(shù),通過(guò)Spring MVC傳到后臺(tái)以后解析中文是亂碼。
1. 發(fā)送請(qǐng)求,從瀏覽器中捕獲到http的請(qǐng)求內(nèi)容如下:
1 Remote Address:[::1]:8080 2 Request URL:http://localhost:8080/fax/downloadFax?fname=%e6%8e%88%e6%9d%832.png 3 Request Method:GET 4 Status Code:201 Created2. 第一時(shí)間認(rèn)為是URL編解碼的問(wèn)題,所以學(xué)習(xí)了一下相關(guān)的轉(zhuǎn)換方法:
1 //將utf-8格式的中文轉(zhuǎn)換成URL編碼 2 encodeStr = URLEncoder.encode(fname, "utf-8"); 3 //將URL編碼的字符串轉(zhuǎn)換成utf-8格式的中文 4 decodeFName = URLDecoder.decode(encodeStr, "utf-8");測(cè)試結(jié)果,沒(méi)有達(dá)到預(yù)期,再仔細(xì)看看,笑了,上面不是做了一次A->B->A的無(wú)效轉(zhuǎn)碼嗎?!
3.亂碼是怎么回事呢?
我的頁(yè)面設(shè)置的utf-8格式,我的Spring MVC框架的編碼filter也配置了utf-8,現(xiàn)在的亂碼是怎么回事呢?
4. 原因找到了:
Spring MVC 是基于Servlet,在Http請(qǐng)求到達(dá)Servlet解析之前,GET過(guò)來(lái)的URL已經(jīng)被Tomcat先做了一次URLDecode。
Tomcat對(duì)GET方式默認(rèn)的URL解碼結(jié)果是iso-8859-1而不是UTF-8!
5. 解決辦法:
decodeFName = new String(fName.getBytes("iso-8859-1"),"utf-8");由于上述原因,在構(gòu)造HTTP響應(yīng)消息時(shí),需要把中文字符再轉(zhuǎn)成iso-8859-1。
6.還有一種辦法,就是配置Tomcat:
在Tomcat的conf目錄下的server.xml中配置Connector的URIEconding=“UTF-8"屬性即可,沒(méi)有這個(gè)參數(shù)可以手動(dòng)加上。
轉(zhuǎn)載于:https://www.cnblogs.com/yoyotl/p/5390876.html
總結(jié)
以上是生活随笔為你收集整理的关于HTTP GET请求的url中文参数编码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 点击cell动态修改高度动画
- 下一篇: 阿里云产品搭建web应用梳理