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

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

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

    一顆開花的樹

    談笑但看風(fēng)云起,龍騰尚待驚蟄春.

     

    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開發(fā),在各服務(wù)器,中間件以及各異的字符集環(huán)境中,深受頁面重定向編碼亂碼之苦,終于痛下決心解決這個問題。
      9     * 思路:
     10     * 在重定向前 將   &a=b  的名值對編碼為  16進(jìn)制
     11     * 在request.getparameter("")時將   重定向前的已經(jīng)編碼的字符串進(jìn)行解碼 
     12     * 
     13     * Java中頁面重定向亂碼終極解決方案-----java, weblogic, websphere, aix,unix,linux,windows,中英文等任何語言
     14     */

     15    
     16    /**
     17     * 16進(jìn)制數(shù)字字符集
     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        // 取出對應(yīng)的值
     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進(jìn)制數(shù)字,適用于所有字符(包括中文)
    148     */

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

    153        // 根據(jù)默認(rèn)編碼獲取字節(jié)數(shù)組
    154        byte[] bytes = str.getBytes();
    155        StringBuilder sb = new StringBuilder(bytes.length * 2);
    156        // 將字節(jié)數(shù)組中每個字節(jié)拆解成2位16進(jìn)制整數(shù)
    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進(jìn)制數(shù)字解碼成字符串,適用于所有字符(包括中文)
    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進(jìn)制整數(shù)組裝成一個字節(jié)
    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 澤來-王者之劍 閱讀(1463) 評論(0)  編輯  收藏 所屬分類: j2se

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 亚洲色精品88色婷婷七月丁香 | 全黄a免费一级毛片人人爱| 亚洲国产高清视频在线观看| 久久国产精品免费网站| 久热综合在线亚洲精品| 久久免费观看国产精品88av| 亚洲网址在线观看你懂的| 免费无码一区二区三区| 亚洲天堂电影在线观看| 免费AA片少妇人AA片直播| 国产亚洲福利在线视频| 国产成人高清精品免费鸭子| 黄色免费网站在线看| 亚洲精品人成无码中文毛片| 男女一进一出抽搐免费视频 | 国产成A人亚洲精V品无码性色 | 人妻在线日韩免费视频| 亚洲bt加勒比一区二区| 国产免费一区二区三区| 亚洲另类无码一区二区三区| 亚洲国产精品成人AV无码久久综合影院| 一级毛片免费毛片毛片| 亚洲av激情无码专区在线播放| 欧洲一级毛片免费| 亚洲国产精品无码久久| 亚洲国产综合精品一区在线播放| 特级无码毛片免费视频| 国产aⅴ无码专区亚洲av| 国产四虎免费精品视频| 亚洲av色香蕉一区二区三区 | 亚洲人成人网站在线观看| 国色精品va在线观看免费视频 | 又粗又大又猛又爽免费视频| 大妹子影视剧在线观看全集免费| 亚洲三级电影网址| 日日AV拍夜夜添久久免费| 国产大片免费天天看| 亚洲午夜精品一区二区公牛电影院 | 免费黄网在线观看| 中文字幕一区二区三区免费视频| 亚洲精品美女在线观看|