escape 格式的编码 的解码方式

escape采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。

Escape/Unescape加密解码/编码解码,又叫%u编码,从以往经验看编码字符串出现有"u",它是unicode编码,那么Escape编码采用是那一种unicode实现形式呢。其实是UTF-16BE模式。这样一来问题非常简单了。 Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u。Unescape解码/解密,就是去掉"%u"后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”,反之也一样!因为目前%字符,常用作URL编码,所以%u这样编码已经逐渐被废弃了

可以使用  StringEscapeUtils 工具类解码

  public static void main(String[] args)   {
        String ss = "%u5179";
        String   strUTF16BE   =  StringEscapeUtils.unescapeJava(ss.replace("%u","\\u"));
        System.out.println(strUTF16BE);
    }
有一组 字符 String ss = "%u5179",特点是 以%u开头,后接四位16进制数字该字符是4个数字表示一个字符。
或者是%开头,后接 //数字//小写字母//大写字母

 

转换方式:

   public static void main(String[] args) throws UnsupportedEncodingException {
        String ss = "%u5179";

        String   strUTF16BE   =  StringEscapeUtils.unescapeJava("\\u5179");
        System.out.println(strUTF16BE);
    }

        public static String escape(String src) {
            int i;
            char j;
            StringBuffer tmp = new StringBuffer();
            tmp.ensureCapacity(src.length() * 6);
            for (i = 0; i < src.length(); i++) {
                j = src.charAt(i);
                //是否是数字//小写字母//大写字母
                if (Character.isDigit(j) || Character.isLowerCase(j)
                        || Character.isUpperCase(j))
                    tmp.append(j);
                else if (j < 256) {
                //可以使用一个字节表示的字符,最大是256
                    tmp.append("%");
                    if (j < 16)
                        tmp.append("0");
                    tmp.append(Integer.toString(j, 16));
                } else {
                    tmp.append("%u");
                    tmp.append(Integer.toString(j, 16));
                }
            }
            return tmp.toString();
        }

        public static String unescape(String src) {
            StringBuffer tmp = new StringBuffer();
            tmp.ensureCapacity(src.length());
            int lastPos = 0, pos = 0;
            char ch;
            while (lastPos < src.length()) {
                pos = src.indexOf("%", lastPos);
                if (pos == lastPos) {
                    if (src.charAt(pos + 1) == 'u') {
                        ch = (char) Integer.parseInt(src
                                .substring(pos + 2, pos + 6), 16);
                        tmp.append(ch);
                        lastPos = pos + 6;
                    } else {
                        ch = (char) Integer.parseInt(src
                                .substring(pos + 1, pos + 3), 16);
                        tmp.append(ch);
                        lastPos = pos + 3;
                    }
                } else {
                    if (pos == -1) {
                        tmp.append(src.substring(lastPos));
                        lastPos = src.length();
                    } else {
                        tmp.append(src.substring(lastPos, pos));
                        lastPos = pos;
                    }
                }
            }
            return tmp.toString();
        }

        /**
         * @disc 对字符串重新编码
         * @param src
         * @return
         */
        public static String isoToGB(String src) {
            String strRet = null;
            try {
                strRet = new String(src.getBytes("ISO_8859_1"), "GB2312");
            } catch (Exception e) {

            }
            return strRet;
        }

        /**
         * @disc 对字符串重新编码
         * @param src
         * @return
         */
        public static String isoToUTF(String src) {
            String strRet = null;
            try {
                strRet = new String(src.getBytes("ISO_8859_1"), "UTF-8");
            } catch (Exception e) {

            }
            return strRet;
        }

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值