中文轉unicode,中文轉bytes,unicode轉bytes java實現


字符串的編碼格式:

String hex="\u5df2\u5b9e\u540d\u5236";// 十六進制

String dec = "全球通";//十進制
String s="已實名制";//字符串

相互轉換的代碼

1.十進制轉unicode編碼

public static String decToHex(String s){
    String[] ds=s.split(";");
    StringBuffer sbf=new StringBuffer();
    for(int i=0;i<ds.length;i++){
        if(ds[i].startsWith("&#")){
            Integer tem=Integer.parseInt(ds[i].replace("&#", ""));
            sbf.append("\\u").append(Integer.toHexString(tem));            
        }
        
    }
    return sbf.toString();
}

2.unicode轉char數組

/** 
 * unicode 轉字符數組 
 */  
public static char[] unicode2Chars(String unicode) {  
   
    StringBuffer string = new StringBuffer();  
   
    String[] hex = unicode.split("\\\\u");  
    
    char[] cs=new char[hex.length];
   
    for (int i = 1; i < hex.length; i++) {  
   
        // 轉換出每一個代碼點  
        int data = Integer.parseInt(hex[i], 16);  
        cs[i]=(char) data;
    }  
   
    return cs;  
}  

3.漢字轉unicode

/**
 * 
 * @param 漢字
 * @return unicode編碼
 */
public static String toUnicode(String s) {
    String as[] = new String[s.length()];
    String s1 = "";
    for (int i = 0; i < s.length(); i++) {
        as[i] = Integer.toHexString(s.charAt(i) & 0xffff);
        s1 = s1 + "\\u" + as[i];
    }
    return s1;
}

 

utf-8

utf-8格式的中文由三位字節組成。

UTF-8的編碼規則很簡單,只有二條:
1)對於單字節的符號,字節的第一位設為0,后面7位為這個符號的unicode碼。因此對於英語字母,UTF-8編碼和ASCII碼是相同的。
2)對於n字節的符號(n>1),第一個字節的前n位都設為1,第n+1位設為0,后面字節的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個符號的unicode碼。
下表總結了編碼規則,字母x表示可用編碼的位。
Unicode符號范圍 | UTF-8編碼方式
(十六進制) | (二進制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

1.中文轉unicode

    public static String toUnicode(String s) {
        String as[] = new String[s.length()];
        String s1 = "";
        for (int i = 0; i < s.length(); i++) {
            as[i] = Integer.toHexString(s.charAt(i) & 0xffff);
            s1 = s1 + "\\u" + as[i];
        }
        return s1;
    }

2.中文轉bytes

byte[] b=s.getBytes("utf-8");

3. unicode轉utf-8

/*
     *  unicode轉到utf-8的轉換過程。
     *  @param 要進行轉換的漢字
     *  @return 16進制表示的漢字UTF-8編碼字節序列 /
     */
    public static String unicode2utf8(char input){
        //1 Byte=8byte 16位取值范圍00~ff
        //input 兩個字節 16位取值范圍為4E00~9FA5
        int lowByte = input & 0x00ff;
        int highByte = (input & 0xff00) >>> 8;

        // UTF-8的第1個字節是1110 + highByte高4位
        int high4inHighByte = (highByte& 0xf0) >>> 4;
        int utf8Byte1 = (7 << 5) + high4inHighByte;
        
        // UTF-8的第2個字節是10 + highByte低4位 + lowByte高2位
        int low4inHighByte = highByte & 0x0f;
        int high2inLowByte = (lowByte& 0xc0) >>> 6;
        int utf8Byte2 = (1 << 7) + (low4inHighByte << 2) + high2inLowByte;

        // UTF-8的第3個字節是10 + lowByte低6位
        int utf8Byte3 = (1 << 7) + (lowByte & 0x3f);
        String result = Integer.toHexString(utf8Byte1) + "," + Integer.toHexString(utf8Byte2) + ","
                + Integer.toHexString(utf8Byte3);
        return result;
    }

 

gbk

GBK編碼,是對GB2312編碼的擴展,因此完全兼容GB2312-80標准。GBK編碼依然采用雙字節編碼方案,其編碼范圍:8140-FEFE,剔除xx7F碼位,共23940個碼位。共收錄漢字和圖形符號21886個,其中漢字(包括部首和構件)21003個,圖形符號883個。GBK編碼支持國際標准ISO/IEC10646-1和國家標准GB13000-1中的全部中日韓漢字,並包含了BIG5編碼中的所有漢字。GBK編碼方案於1995年12月15日正式發布,這一版的GBK規范為1.0版。

GBK 亦采用雙字節表示,總體編碼范圍為 8140-FEFE,首字節在 81-FE 之間,尾字節在 40-FE 之間,剔除 xx7F 一條線。總計 23940 個碼位,共收入 21886 個漢字和圖形符號,其中漢字(包括部首和構件)21003 個,圖形符號 883 個。

全部編碼分為三大部分:

1. 漢字區。包括:
a. GB 2312 漢字區。即 GBK/2: B0A1-F7FE。收錄 GB 2312 漢字 6763 個,按原順序排列。
b. GB 13000.1 擴充漢字區。包括:
(1) GBK/3: 8140-A0FE。收錄 GB 13000.1 中的 CJK 漢字 6080 個。
(2) GBK/4: AA40-FEA0。收錄 CJK 漢字和增補的漢字 8160 個。CJK 漢字在前,按 UCS 代碼大小排列;增補的漢字(包括部首和構件)在后,按《康熙字典》的頁碼/字位排列。
(3) 漢字“〇”安排在圖形符號區GBK/5:A996。

2. 圖形符號區。包括:
a. GB 2312 非漢字符號區。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符號外,還有 10 個小寫羅馬數字和 GB 12345 增補的符號。計符號 717 個。
b. GB 13000.1 擴充非漢字區。即 GBK/5: A840-A9A0。BIG-5 非漢字符號、結構符和“〇”排列在此區。計符號 166 個。

3. 用戶自定義區:分為(1)(2)(3)三個小區。
(1) AAA1-AFFE,碼位 564 個。
(2) F8A1-FEFE,碼位 658 個。
(3) A140-A7A0,碼位 672 個。
第(3)區盡管對用戶開放,但限制使用,因為不排除未來在此區域增補新字符的可能性。

舉例:

        String s="中文";
                byte[] b=s.getBytes("gbk");

bytes為

[-42, -48, -50, -60]

補碼為:

【214,208,206,196】

轉換為十六進展為

【D6,D0,CE,C4】

按照gbk表去查詢漢字

 

編碼完全匹配。

 


免責聲明!

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



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