jee中文名圖片+tomcat ==> 中文亂碼的另類處理(未成功)

一、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

相關文章
相關標籤/搜索