一、java
1.一、tomcat 7 默認是 ISO-8859-1編碼(單字節編碼)瀏覽器
1.二、若是使用這個編碼的話,(我的猜想)tomcat沒法管理相關的中文名的文件(包括 中文名的圖片 等)tomcat
1.三、∴ 須要設置 tomcat的編碼爲 能容納中文的 編碼方式。服務器
二、jsp
嘗試倒騰的測試代碼:ide
思路:原本,utf-8頁面(jsp) 傳來的jpg文件名是 utf-8編碼的,傳到服務器後找不到相應的圖片。因而,想經過 過濾器,轉換 編碼,使得tomcat可以找到 服務器上相應的圖片。函數
過濾器的 doFilter函數:測試
1 @Override 2 public void doFilter(ServletRequest _request, ServletResponse _response, 3 FilterChain _chain) throws IOException, ServletException 4 { 5 // ZC: 打印全部的傳入參數 6 /* Enumeration<String> enum1 = _request.getParameterNames(); 7 while (enum1.hasMoreElements()) 8 { 9 String strName = enum1.nextElement().toString(); 10 String strValue = _request.getParameter(strName); 11 System.out.println(strName+"--------------"+strValue); 12 } 13 System.out.println(""); 14 */ 15 /* 16 String strCeShi = "測試"; 17 byte[] bytes = strCeShi.getBytes("gbk"); 18 System.out.println("GBK :"); 19 for (int i=0; i<bytes.length; i++) 20 System.out.println(Integer.toString((int)bytes[i] & 0xFF, 16)); 21 System.out.println(""); 22 23 bytes = strCeShi.getBytes("utf-8"); 24 System.out.println("UTF-8 :"); 25 for (int i=0; i<bytes.length; i++) 26 System.out.println(Integer.toString((int)bytes[i] & 0xFF, 16)); 27 System.out.println(""); 28 29 bytes = strCeShi.getBytes("iso-8859-1"); 30 System.out.println("ISO-8859-1 :"); 31 for (int i=0; i<bytes.length; i++) 32 System.out.println(Integer.toString((int)bytes[i] & 0xFF, 16)); 33 System.out.println(""); 34 35 strCeShi = "測試"; 36 bytes = strCeShi.getBytes("big5"); 37 System.out.println("BIG5 :"); 38 for (int i=0; i<bytes.length; i++) 39 System.out.println(Integer.toString((int)bytes[i] & 0xFF, 16)); 40 System.out.println(""); 41 42 // 字節流(地址從低到高) 43 // GBK : b2 e2 ca d4 44 // UTF-8 : e6 b5 8b e8 af 95 45 // ISO-8859-1 : 3f 3f (ZC: 這個明顯不對了哇) 46 // big5(測試) : b4 fa b8 d5 47 //*/ 48 49 String str1 = ((HttpServletRequest)_request).getRequestURI(); 50 System.out.println("str1 : "+str1); 51 String str2 = URLDecoder.decode(str1, "utf-8"); // unescape() decodeURI() decodeURIComponent() 52 System.out.println("str2 : "+str2); 53 54 // ZC: 下面測試發現,當瀏覽器請求頁面時,能夠經過下面的方式轉到別的頁面(或者直接是圖片都行) 55 // ZC: 請求某個圖片時,也能夠跳轉到別的圖片 56 String strUTF8in = "/JpgNameWithChinese/%E6%B5%8B%E8%AF%95.jpg"; 57 //String strUTF8in = "/JpgNameWithChinese/"; 58 if (0 == strUTF8in.compareToIgnoreCase(str1)) 59 { 60 System.out.println("== 0"); 61 62 //String strCeShi = "測試"; 63 //String str4 = URLEncoder.encode(strCeShi, "utf-8")+".jpg"; 64 //* 65 byte[] bytesUTF8 = new byte[6]; 66 bytesUTF8[0] = (byte)0xE6; 67 bytesUTF8[1] = (byte)0xB5; 68 bytesUTF8[2] = (byte)0x8B; 69 bytesUTF8[3] = (byte)0xE8; 70 bytesUTF8[4] = (byte)0xAF; 71 bytesUTF8[5] = (byte)0x95; 72 73 String strUTF8 = new String(bytesUTF8, "utf-8"); 74 strUTF8 += ".jpg"; 75 //*/ 76 /* 77 byte[] bytesGBK = new byte[4]; 78 bytesGBK[0] = (byte)0xb2; 79 bytesGBK[1] = (byte)0xe2; 80 bytesGBK[2] = (byte)0xca; 81 bytesGBK[3] = (byte)0xd4; 82 83 String strGBK = new String(bytesGBK, "GBK"); 84 strGBK += ".jpg"; 85 //*/ 86 87 //_request.getRequestDispatcher("a.jsp").forward(_request, _response); 88 //_request.getRequestDispatcher("CeShi.jpg").forward(_request, _response); 89 //_request.getRequestDispatcher(strUTF8).forward(_request, _response); 90 //_request.getRequestDispatcher(strGBK).forward(_request, _response); 91 92 _request.getRequestDispatcher("測試.jpg").forward(_request, _response); 93 } 94 else 95 _chain.doFilter(_request, _response);//放行 96 }
通過的折騰:編碼
一、對 "((HttpServletRequest)_request).getRequestURI()" 作各類編碼轉換的折騰spa
二、將 tomcat的 編碼方式 設置爲 "gbk"/"utf-8"
獲得的不理想的結論:
一、無論怎麼弄,想要 tomcat可以找到 中文的圖片,至少 tomcat得是 可以容納中文的編碼方式,不然就是扯淡...
二、因爲上一條結論,那還作什麼編碼轉換啊...直接 網頁頁面 和 tomcat 都設置成 utf-8 就好了
三、暫時(20151207)的理解是這樣...之後看,還有別的理解不...
測試代碼保存於:百度雲 CodeSkill33 --> 所有文件 > java_測試_code_zc --> JpgNameWithChinese__Work_20151207_1612.rar