• jee中文名图片+tomcat ==> 中文乱码的另类处理(未成功)


    1、

    1.1、tomcat 7 默认是 ISO-8859-1编码(单字节编码)

    1.2、如果使用这个编码的话,(个人猜测)tomcat无法管理相关的中文名的文件(包括 中文名的图片 等)

    1.3、∴ 需要设置 tomcat的编码为 能容纳中文的 编码方式。

    2、

    尝试倒腾的测试代码:

    思路:本来,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     }

    经过的折腾:

      1、对 "((HttpServletRequest)_request).getRequestURI()" 做各种编码转换的折腾

      2、将 tomcat的 编码方式 设置为 "gbk"/"utf-8"

    得到的不理想的结论:

      1、不管怎么弄,想要 tomcat能够找到 中文的图片,至少 tomcat得是 能够容纳中文的编码方式,否则就是扯淡...

      2、由于上一条结论,那还做什么编码转换啊...直接 网页页面 和 tomcat 都设置成 utf-8 就行了

      3、暂时(20151207)的理解是这样...以后看,还有别的理解不...

    测试代码保存于:百度云 CodeSkill33 --> 全部文件 > java_测试_code_zc --> JpgNameWithChinese__Work_20151207_1612.rar

  • 相关阅读:
    调用Android自带日历功能
    android使用全局变量传递数据
    安卓高手之路之java层Binder
    无刷新实时获得数据
    Android画图之抗锯齿
    android 定时器的实现
    将apk文件添加到Android模拟器(AVD)中运行
    Android 屏幕自适应方向尺寸
    经常用得到的安卓数据库基类
    android系统特效详解和修改方法
  • 原文地址:https://www.cnblogs.com/codeskilla/p/5026378.html
Copyright © 2020-2023  润新知