關於計算機編碼

【百度百科】

    字符編碼(英語:Character encoding)也稱字集碼,是把字符集中的字符編碼爲指定集合中某一對象(例如:比特模式、自然數序列、8位組或者電脈衝),以便文本計算機中存儲和通過通信網絡的傳遞。

    說明白點就是如何有效的將信息通過一種大家都能識別的方式進行傳輸和閱讀,就好比兩個人同時約定用英文、德文還是中文進行通信。而對於計算機而言,無論什麼樣的編碼格式,在底層都是以01(或者高電平、低電平)的方式進行存儲和識別。沿着計算機的發展,我們先來聊聊編碼的演化過程。

【ASCII碼】

在計算機發展的早期,人們發明了ASCII碼編碼方式,當然很大程度上是由於洋人們的信息都是由abcd26個字母、阿拉伯數字和一些符號組成,所以較爲簡單的使用了ASCII碼編碼。所謂的ASCII碼就是以7位bit位存儲一個字符,加一位擴展位,總共8位組成一個Byte字節。如:

Bin(二進制)
Oct(八進制)
Dec(十進制)
Hex(十六進制)
縮寫/字符
解釋
0000 0000
0
0
00
NUL(null)
空字符
0000 0001
1
1
01
SOH(start of headline)
標題開始
0000 0010
2
2
02
STX (start of text)
正文開始
0000 0011
3
3
03
ETX (end of text)
正文結束
0000 0100
4
4
04
EOT (end of transmission)
傳輸結束
0000 0101
5
5
05
ENQ (enquiry)
請求
0000 0110
6
6
06
ACK (acknowledge)
收到通知
0000 0111
7
7
07
BEL (bell)
響鈴
0000 1000
10
8
08
BS (backspace)
退格
0000 1001
11
9
09
HT (horizontal tab)
水平製表符
0000 1010
12
10
0A
LF (NL line feed, new line)
換行鍵
0000 1011
13
11
0B
VT (vertical tab)
垂直製表符
0000 1100
14
12
0C
FF (NP form feed, new page)
換頁鍵
0000 1101
15
13
0D
CR (carriage return)
回車鍵
0000 1110
16
14
0E
SO (shift out)
不用切換
0000 1111
17
15
0F
SI (shift in)
啓用切換
0001 0000
20
16
10
DLE (data link escape)
數據鏈路轉義
0001 0001
21
17
11
DC1 (device control 1)
設備控制1
0001 0010
22
18
12
DC2 (device control 2)
設備控制2
0001 0011
23
19
13
DC3 (device control 3)
設備控制3
0001 0100
24
20
14
DC4 (device control 4)
設備控制4
0001 0101
25
21
15
NAK (negative acknowledge)
拒絕接收
0001 0110
26
22
16
SYN (synchronous idle)
同步空閒
0001 0111
27
23
17
ETB (end of trans. block)
結束傳輸塊
0001 1000
30
24
18
CAN (cancel)
取消
0001 1001
31
25
19
EM (end of medium)
媒介結束
0001 1010
32
26
1A
SUB (substitute)
代替
0001 1011
33
27
1B
ESC (escape)
換碼(溢出)
0001 1100
34
28
1C
FS (file separator)
文件分隔符
0001 1101
35
29
1D
GS (group separator)
分組符
0001 1110
36
30
1E
RS (record separator)
記錄分隔符
0001 1111
37
31
1F
US (unit separator)
單元分隔符
0010 0000
40
32
20
(space)
空格
0010 0001
41
33
21
!
歎號
0010 0010
42
34
22
"
雙引號
0010 0011
43
35
23
#
井號
0010 0100
44
36
24
$
美元符
0010 0101
45
37
25
%
百分號
0010 0110
46
38
26
&
和號
0010 0111
47
39
27
'
閉單引號
0010 1000
50
40
28
(
開括號
0010 1001
51
41
29
)
閉括號
0010 1010
52
42
2A
*
星號
0010 1011
53
43
2B
+
加號
0010 1100
54
44
2C
,
逗號
0010 1101
55
45
2D
-
減號/破折號
0010 1110
56
46
2E
.
句號
00101111
57
47
2F
/
斜槓
00110000
60
48
30
0
數字0
00110001
61
49
31
1
數字1
00110010
62
50
32
2
數字2

當時人們很快發現它的侷限性,畢竟世界那麼大,語言那麼豐富,這最多的256個字符遠不能表達人們的想法。於是乎,unicode、utf-8、gb2312、gbk、base64等等多種編碼格式孕育而生。由於作者能力精力有限,只介紹幾種主流的編碼格式。

【unicode】

unicode又被稱位統一碼、萬國碼,原因就是因爲它能收錄全世界所有的語言文字符號。其原理就是將原理8位的ascii碼擴張爲16位,即2個字節,這樣就能收錄中文、日文、韓文、阿拉伯文等等所有文字,一統天下!



【java 編碼】

public static void main(String[] args)  {
    String s = "金";
    char[] c = new char[1];
    c = s.toCharArray();
    byte[] b;
    try {
        //獲取系統當前的編碼格式
        System.out.println(System.getProperty("sun.jnu.encoding"));;

        //GBK 編碼
        b = s.getBytes("gbk");
        System.out.print("gbk:");
        for (byte i : b)
            System.out.print(Integer.toHexString(Byte.valueOf(i)) + "  ");

        //UTF-8 編碼
        b = s.getBytes("utf-8");
        System.out.println();
        System.out.print("utf-8:");
        for (byte i : b)
            System.out.print(Integer.toHexString(Byte.valueOf(i)) + "  ");

        //unicode編碼
        b = s.getBytes("unicode");
        System.out.println();
        System.out.print("unicode:");
        for (byte i : b)
            System.out.print(Integer.toHexString(Byte.valueOf(i))+ " ");

        //默認爲unicode
        System.out.println();
        for (int i = 0; i < c.length; i++) {
            System.out.println(c[i]+":"+Integer.toHexString(c[i]));
        }
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}
輸出:GBK
gbk:ffffffbd  fffffff0  
utf-8:ffffffe9  ffffff87  ffffff91  
unicode:fffffffe ffffffff ffffff91 ffffffd1 
金:91d1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章