<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一顆開花的樹

    談笑但看風云起,龍騰尚待驚蟄春.

     

    Java中頁面重定向亂碼終極解決方案-----java, weblogic, websphere, aix,unix,linux,windows,中英文等任何語言

      1import java.io.ByteArrayOutputStream;
      2import javax.servlet.http.HttpServletRequest;
      3
      4public class URLDecoder {
      5    
      6    /**
      7     * 前言:
      8     * 多年java開發,在各服務器,中間件以及各異的字符集環境中,深受頁面重定向編碼亂碼之苦,終于痛下決心解決這個問題。
      9     * 思路:
     10     * 在重定向前 將   &a=b  的名值對編碼為  16進制
     11     * 在request.getparameter("")時將   重定向前的已經編碼的字符串進行解碼 
     12     * 
     13     * Java中頁面重定向亂碼終極解決方案-----java, weblogic, websphere, aix,unix,linux,windows,中英文等任何語言
     14     */

     15    
     16    /**
     17     * 16進制數字字符集
     18     */

     19    private static String hexString = "0123456789ABCDEF ";
     20    public final static String NothingStr = "";
     21    public final static String NullStr = "null#NULL#Null";
     22    
     23    
     24    
     25    
     26    /**
     27     * 用于頁面的名值對取值方法
     28     */

     29    public static String getParameter(HttpServletRequest request, String parameter) {
     30        if (isNull(parameter)) {
     31            return "";
     32        }

     33        String value = "";
     34        // 先編碼查詢串
     35        String params = enCodeHex(parameter);
     36        // 取出對應的值
     37        value = (String) request.getParameter(params);
     38        // 解碼值
     39        value = deCodeHex(value);
     40        return value;
     41    }

     42    
     43    
     44    /**
     45     * 編碼QueryString
     46     * @param str
     47     * @return
     48     */

     49    public static String encodeQueryString(String params) {
     50        if (isNull(params)) {
     51            return "";
     52        }

     53        StringBuffer hexStrBuffer = new StringBuffer();
     54        if (params.startsWith("?")) {
     55            // ?開頭的queryString先處理?
     56            hexStrBuffer.append("?");
     57            String firstStr = params.substring(params.indexOf("?"+ 1, params.indexOf("&"));
     58            String strIn[] = firstStr.split("=");
     59            if (strIn.length == 2{
     60                hexStrBuffer.append(enCodeHex(strIn[0]));
     61                hexStrBuffer.append("=");
     62                hexStrBuffer.append(enCodeHex(strIn[1]));
     63            }

     64            params = params.substring(params.indexOf("&"));
     65        }

     66        String strOut[] = params.split("&");
     67        boolean bool = false;
     68        for (int i = 0; i < strOut.length; i++{
     69            String strIn[] = strOut[i].split("=");
     70            if (strIn.length == 2{
     71                if (params.startsWith("&")) {
     72                    bool = true;
     73                }
     else if (!params.startsWith("&"&& i > 0{
     74                    bool = true;
     75                }

     76                if (bool) {
     77                    hexStrBuffer.append("&");
     78                }

     79                hexStrBuffer.append(enCodeHex(strIn[0]));
     80                hexStrBuffer.append("=");
     81                hexStrBuffer.append(enCodeHex(strIn[1]));
     82            }

     83        }

     84        return hexStrBuffer.toString();
     85    }

     86    
     87    /**
     88     * 解碼QueryString
     89     * @param params
     90     * @return
     91     */

     92    public static String deCodeString(String params) {
     93        System.out.println("URLDecoder  deCodeString: " + params);
     94        if (isNull(params)) {
     95            return "";
     96        }

     97        StringBuffer hexStrBuffer = new StringBuffer();
     98        // ?開頭的queryString先處理?
     99        if (params.startsWith("?")) {
    100            hexStrBuffer.append("?");
    101            String firstStr = params.substring(params.indexOf("?"+ 1, params.indexOf("&"));
    102            String strIn[] = firstStr.split("=");
    103            if (strIn.length == 2{
    104                hexStrBuffer.append(deCodeHex(strIn[0]));
    105                hexStrBuffer.append("=");
    106                hexStrBuffer.append(deCodeHex(strIn[1]));
    107            }

    108            params = params.substring(params.indexOf("&"));
    109        }

    110        String strOut[] = params.split("&");
    111        boolean bool = false;
    112        for (int i = 0; i < strOut.length; i++{
    113            String strIn[] = strOut[i].split("=");
    114            if (strIn.length == 2{
    115                if (params.startsWith("&")) {
    116                    bool = true;
    117                }
     else if (!params.startsWith("&"&& i > 0{
    118                    bool = true;
    119                }

    120                if (bool) {
    121                    hexStrBuffer.append("&");
    122                }

    123                hexStrBuffer.append(deCodeHex(strIn[0]));
    124                hexStrBuffer.append("=");
    125                hexStrBuffer.append(deCodeHex(strIn[1]));
    126            }

    127        }

    128        return hexStrBuffer.toString();
    129    }

    130    
    131    
    132    /**
    133     * 判斷是否是空串
    134     * 
    135     * @param s
    136     * @return
    137     */

    138    private static boolean isNull(String s) {
    139        if (s == null || (NullStr.indexOf(s) > -1 || s.trim().equals(NothingStr))
    140                || "undefined".equals(String.valueOf(s))) {
    141            return true;
    142        }

    143        return false;
    144    }

    145    
    146    /*
    147     * 將字符串編碼成16進制數字,適用于所有字符(包括中文)
    148     */

    149    private static String enCodeHex(String str) {
    150        if (isNull(str)) {
    151            return "";
    152        }

    153        // 根據默認編碼獲取字節數組
    154        byte[] bytes = str.getBytes();
    155        StringBuilder sb = new StringBuilder(bytes.length * 2);
    156        // 將字節數組中每個字節拆解成2位16進制整數
    157        for (int i = 0; i < bytes.length; i++{
    158            sb.append(hexString.charAt((bytes[i] & 0xf0>> 4));
    159            sb.append(hexString.charAt((bytes[i] & 0x0f>> 0));
    160        }

    161        return sb.toString();
    162    }

    163
    164    /*
    165     * 將16進制數字解碼成字符串,適用于所有字符(包括中文)
    166     */

    167    private static String deCodeHex(String bytes) {
    168        if (isNull(bytes)) {
    169            return "";
    170        }

    171        ByteArrayOutputStream baos = new ByteArrayOutputStream(bytes.length() / 2);
    172        // 將每2位16進制整數組裝成一個字節
    173        for (int i = 0; i < bytes.length(); i += 2{
    174            baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString.indexOf(bytes.charAt(i + 1))));
    175        }

    176        return new String(baos.toByteArray());
    177    }

    178}

    179

    posted on 2010-05-31 21:23 澤來-王者之劍 閱讀(1455) 評論(0)  編輯  收藏 所屬分類: j2se

    導航

    統計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 鲁丝片一区二区三区免费 | 亚洲一本之道高清乱码| 特级做A爰片毛片免费看无码| 爱情岛论坛网亚洲品质自拍| 大片免费观看92在线视频线视频| 亚洲私人无码综合久久网| 无码av免费毛片一区二区| 亚洲午夜久久久久久尤物| 国产免费毛不卡片| 亚洲精品女同中文字幕| 全部免费国产潢色一级| 一级免费黄色毛片| 亚洲av综合av一区| 成人在线免费看片| 亚洲国产欧美一区二区三区 | 免费一级毛片在播放视频| 成年免费大片黄在线观看com| 亚洲另类激情专区小说图片| 一级女人18片毛片免费视频| 亚洲精品无码午夜福利中文字幕 | 久久精品亚洲中文字幕无码网站| 亚欧日韩毛片在线看免费网站| 亚洲美女一区二区三区| 国产精品久久久久免费a∨| 亚洲av成人无码网站…| 在线视频精品免费| 亚洲JIZZJIZZ妇女| 在线观看亚洲天天一三视| 最近中文字幕免费2019| 亚洲国产成人久久精品软件 | 久久久久亚洲av无码尤物| 免费精品国产自产拍在线观看图片| 亚洲午夜无码久久久久小说| 亚洲国产精品日韩专区AV| 免费国产成人18在线观看| 亚洲AV无码一区二区三区人| www国产亚洲精品久久久日本| 可以免费观看的毛片| 亚洲国产美女精品久久久| 亚洲精品乱码久久久久久蜜桃不卡 | 在线观看视频免费国语|