路徑帶中文,顯示亂碼(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>

測試結果:javascript

 
 
  因而在網上搜索 「<img/>路徑帶中文 亂碼」的相關處理,暫時(20151025) 我只找到下面這一種處理方式(修改 「 ??\apache-tomcat-7.0.47-windows-x86\conf\server.xml」的配置):
 
  一、原來的 <Connector/>的內容爲:
  <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" />
 
  二、添加 URIEncoding 的設置後,變成:
  <Connector port="8080" protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443"  URIEncoding="UTF-8"  />
 
  三、重啓 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
相關文章
相關標籤/搜索