Java 中將字符串與 unicode 相互轉換的工具類


unicode 編碼規則 
unicode 碼對每一個字符用4位16進制數表示。具體規則是:將一個字符(char)的高8位與低8位分別取出,轉化為16進制數,如果轉化的16進制數的長度不足2位,則在其后補0,然后將高、低8位轉成的16進制字符串拼接起來並在前面補上"\u" 即可。 

 

轉換工具實現代碼:

 

/**
 * 字符串與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

全文完

:)

 

原文地址:

https://www.cnblogs.com/poterliu/p/9579918.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM