路徑帶中文,顯示亂碼(URIEncoding)


問題來源:
  做html5的video的時候,在設置播放文件的文件名為中文的時候,出現GET請求的文件名為亂碼(實際上,也不是亂碼,是對應的"utf-8"字符串的byte數組的16進制表示的字符串。∵我設置的jsp/html編碼都是"utf-8")
 
  嘗試了一般的處理手段(如 “request.setCharacterEncoding("utf-8");”,“str = new String(str.getBytes("ISO-8859-1"),"utf-8");”,“ URLEncoder.encode”,“ URLEncoder.encode”),都不見效。
 
  想到,類似<video>,<img/> 等的數據請求,是瀏覽器客戶端直接向tomcat發送的請求信息,然后tomcat也直接就將數據發給瀏覽器了,請求的信息 並不會經過 我們編寫的 jsp、servlet、filter等的處理,因此 上面的處理手段不會生效。
用<img/>測試了一下,測試代碼為:
 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 2 <html>
 3   <head>
 4     <title>主頁</title>
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 6   </head>
 7   <body>
 8       主頁 <br>
 9     <br/><br/>
10     <img src="花.jpg" alt="郁金香" />
11   </body>
12 </html>
 1 <%@ page language="java" import="java.util.*, fileTraversal.*, java.net.*" pageEncoding="utf-8"%>
 2 <%request.setCharacterEncoding("utf-8");%>
 3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 4 <html>
 5   <head>
 6     <title>主頁</title>
 7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 8   </head>
 9   <body>
10       主頁 <br>
11     <br/><br/>
12     <%
13     String str = "花.jpg";
14     //String str = URLEncoder.encode("花.jpg", "utf-8");
15     %>
16     <script type="text/javascript">
17         window.onload = function()
18         {
19         //    var img01 = document.getElementById("img01");
20         //    img01.src = encodeURI("<%=str%>");
21         };
22     </script>
23     <img id="img01" src="<%=str%>" alt="郁金香" />
24   </body>
25 </html>

測試結果:

 
 
  於是在網上搜索 “<img/>路徑帶中文 亂碼”的相關處理,暫時(20151025) 我只找到下面這一種處理方式(修改 “ ??\apache-tomcat-7.0.47-windows-x86\conf\server.xml”的配置):
 
  1、原來的 <Connector/>的內容為:
  <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
 
  2、添加 URIEncoding 的設置后,變成:
  <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"  URIEncoding="UTF-8"  />
 
  3、重啟 tomcat,測試 一切OK。

 

PS:注意:這樣修改之后 tomcat向 我們編寫的jsp、servlet、filter等 發送信息的時候,就是"UTF-8"編碼了,有些地方的“str = new String(str.getBytes("ISO-8859-1"),"utf-8");”就不再需要了(調用了反而出錯)(沒有指定URIEncoding的時候,tomcat默認接收/發送的都是"ISO-8859-1"編碼的信息)
 
ZC:自我感覺,瀏覽器<-->tomcat的流程是這樣的:
  瀏覽器 --> 發請求 --> tomcat --> 我們編寫的jsp、servlet、filter等 --> tomcat --> 瀏覽器。
  其中,傳送的數據 都是 byte數組的形式,又∵ tomcat的默認編碼為ISO-8859-1,∴即使 jsp/html編碼設置為utf-8,我們從tomcat得到的數據仍然是亂碼(utf-8字符串的byte數組的16進制表示的字符串),需要操作“str = new String(str.getBytes("ISO-8859-1"),"utf-8");”進行轉換。
  實際上,我覺得 處理中文亂碼最簡單的方式是 jsp/html/servlet/tomcat 的編碼都設置成 utf-8,即可。(這樣設置之后,就不再需要處理亂碼的GET/POST方式,等等方式了) --> 這一條,待驗證,以后自己邊做邊驗證(20151025)。
 
 
 
C
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM