测试代码

复制代码

package cn.java.codec.unicode;public class Test {    public static void main(String[] args) throws Exception {
        String str = "test中文";
        String unicodeEncode = UnicodeUtil.encode(str);
        System.out.println("UnicodeUtil.encode Result : " + unicodeEncode);
        
        str = UnicodeUtil.decode(unicodeEncode);
        System.out.println("UnicodeUtil.decode Result : " + str);
    }
}

复制代码

输出内容

UnicodeUtil.encode Result : \u0074\u0065\u0073\u0074\u4e2d\u6587
UnicodeUtil.decode Result : test中文

 

 

工具类

复制代码

package cn.java.codec.unicode;/**
 * 每六位描述一个字节
 * @author zhouzhian */public class UnicodeUtil {    
    /**
     * 字符串编码成Unicode编码     */
    public static String encode(String src) throws Exception {        char c;
        StringBuilder str = new StringBuilder();        int intAsc;
        String strHex;        for (int i = 0; i < src.length(); i++) {
            c = src.charAt(i);
            intAsc = (int) c;
            strHex = Integer.toHexString(intAsc);            if (intAsc > 128)
                str.append("\\u" + strHex);            else
                str.append("\\u00" + strHex); // 低位在前面补00        }        return str.toString();
    }    
    /**
     * Unicode解码成字符串
     * @param src
     * @return
     */
    public static String decode(String src) {        int t =  src.length() / 6;
        StringBuilder str = new StringBuilder();        for (int i = 0; i < t; i++) {
            String s = src.substring(i * 6, (i + 1) * 6); // 每6位描述一个字节            // 高位需要补上00再转
            String s1 = s.substring(2, 4) + "00";            // 低位直接转
            String s2 = s.substring(4);            // 将16进制的string转为int
            int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16);            // 将int转换为字符
            char[] chars = Character.toChars(n);
            str.append(new String(chars));
        }        return str.toString();
    }
}

复制代码