字符串乱码和正常码的相互转换

来源:互联网 发布:穷人突破阶级知乎 编辑:程序博客网 时间:2024/06/05 18:52
package com.svs.util;public class MyConverter {private final static String[] hex =     {        "00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f",        "10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f",        "20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f",        "30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f",        "40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f",        "50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f",        "60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f",        "70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f",        "80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f",        "90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f",        "a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af",        "b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf",        "c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf",        "d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df",        "e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef",        "f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"    };    private final static byte[] val =     {        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,        0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f    };         public static String escape(String s)     {        StringBuffer sbuf = new StringBuffer();        int len = s.length();        for (int i = 0; i < len; i++)     {        int ch = s.charAt(i);        if ('A' <= ch && ch <= 'Z')     {        sbuf.append((char) ch);        }     else if ('a' <= ch && ch <= 'z')     {        sbuf.append((char) ch);        }     else if ('0' <= ch && ch <= '9')     {               sbuf.append((char) ch);        }     else if (ch == '-' || ch == '_'         || ch == '.' || ch == '!' || ch == '~' || ch == '*'        || ch == '\'' || ch == '(' || ch == ')')     {        sbuf.append((char) ch);        } else if (ch <= 0x007F)     {        sbuf.append('%');        sbuf.append(hex[ch]);        } else     {        sbuf.append('%');        sbuf.append('u');        sbuf.append(hex[(ch >>> 8)]);        sbuf.append(hex[(0x00FF & ch)]);        }        }        return sbuf.toString();        }           public static String unescape(String s)     {        StringBuffer sbuf = new StringBuffer();        int i = 0;        int len = s.length();        while (i < len)     {        int ch = s.charAt(i);        if ('A' <= ch && ch <= 'Z')     {        sbuf.append((char) ch);        }     else if ('a' <= ch && ch <= 'z')     {         sbuf.append((char) ch);        } else if ('0' <= ch && ch <= '9')    { sbuf.append((char) ch);        }     else if (ch == '-' || ch == '_'|| ch == '.'              || ch == '!' || ch == '~' || ch == '*'             || ch == '\'' || ch == '(' || ch == ')')    {            sbuf.append((char) ch);        }     else if (ch == '%')    {        int cint = 0;        if ('u' != s.charAt(i + 1))    {        cint = (cint << 4) | val[s.charAt(i + 1)];        cint = (cint << 4) | val[s.charAt(i + 2)];        i += 2;        } else    {        cint = (cint << 4) | val[s.charAt(i + 2)];        cint = (cint << 4) | val[s.charAt(i + 3)];        cint = (cint << 4) | val[s.charAt(i + 4)];        cint = (cint << 4) | val[s.charAt(i + 5)];        i += 5;        }        sbuf.append((char) cint);        } else     {        sbuf.append((char) ch);        }        i++;        }        return sbuf.toString();        }           public static void main(String[] args)     {        String stest = "1234 中国  abcd[]()<+>,.~\\";        System.out.println(stest);        System.out.println(escape(stest));        System.out.println(unescape(escape(stest)));        }    }


运行结果:

1234 中国  abcd[]()<+>,.~\
1234%20%u4e2d%u56fd%20%20abcd%5b%5d()%3c%2b%3e%2c.~%5c
1234 中国  abcd[]()<+>,.~\

原创粉丝点击