码迷,mamicode.com
首页 > 编程语言 > 详细

Java中将字符串与unicode的相互转换工具类

时间:2018-09-04 10:39:11      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:rev   声明   temp   ++   border   switch   indexof   dex   convert   

unicode编码规则 
unicode码对每一个字符用4位16进制数表示。具体规则是:将一个字符(char)的高8位与低8位分别取出,转化为16进制数,如果转化的16进制数的长度不足2位,则在其后补0,然后将高、低8位转成的16进制字符串拼接起来并在前面补上"\u" 即可。 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/poterliu/p/9579918.html

联系邮箱:poterliu@qq.com

联系微信:poterliu

或者扫二维码

技术分享图片

转换工具实现代码:

 

/**
 * 字符串与unicode的相互转换工具类
 * @author poterliu
 */
public class UnicodeConvertUtil {
    
    /** 
     * 将字符串转成unicode 
     * @param str 待转字符串 
     * @return unicode字符串 
     */ 
    public static String convert(String str) { 
        str = (str == null ? "" : str); 
        String tmp; 
        StringBuffer sb = new StringBuffer(1000); 
        char c; 
        int i, j; 
        sb.setLength(0); 
        for (i = 0; i < str.length(); i++) { 
            c = str.charAt(i); 
            sb.append("\\u"); 
            j = (c >>>8); //取出高8位 
            tmp = Integer.toHexString(j); 
            if (tmp.length() == 1) 
                sb.append("0"); 
            sb.append(tmp); 
            j = (c & 0xFF); //取出低8位 
            tmp = Integer.toHexString(j); 
            if (tmp.length() == 1) 
                sb.append("0"); 
            sb.append(tmp); 
            
        } 
        return (new String(sb)); 
    } 
    
    /** 
     * 将unicode转成字符串 
     * @param str 待转字符串 
     * @return 普通字符串 
     */ 
    public static String revert(String str)     { 
        str = (str == null ? "" : str); 
        if (str.indexOf("\\u") == -1)//如果不是unicode码则原样返回 
            return str; 
        
        StringBuffer sb = new StringBuffer(1000); 
        
        for (int i = 0; i < str.length() - 6;) { 
            String strTemp = str.substring(i, i + 6); 
            String value = strTemp.substring(2); 
            int c = 0; 
            for (int j = 0; j < value.length(); j++) { 
                char tempChar = value.charAt(j); 
                int t = 0; 
                switch (tempChar) 
                { 
                case ‘a‘: 
                    t = 10; 
                    break; 
                case ‘b‘: 
                    t = 11; 
                    break; 
                case ‘c‘: 
                    t = 12; 
                    break; 
                case ‘d‘: 
                    t = 13; 
                    break; 
                case ‘e‘: 
                    t = 14; 
                    break; 
                case ‘f‘: 
                    t = 15; 
                    break; 
                default: 
                    t = tempChar - 48; 
                    break; 
                } 
                c += t * ((int) Math.pow(16, (value.length() - j - 1))); 
            } 
            sb.append((char) c); 
            i = i + 6; 
        } 
        return sb.toString(); 
    }

}

 

 

参考:

https://blog.csdn.net/yanqun1017/article/details/60955807

全文完

:)

Java中将字符串与unicode的相互转换工具类

标签:rev   声明   temp   ++   border   switch   indexof   dex   convert   

原文地址:https://www.cnblogs.com/poterliu/p/9579918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!