java util - Unicode转换工具

 

测试代码

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();
    }
}

 

posted on 2017-01-19 14:45  周~~  阅读(6306)  评论(1编辑  收藏  举报

导航