关于计算机编码

【百度百科】

    字符编码(英语: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


猜你喜欢

转载自blog.csdn.net/jc_986/article/details/80299372
今日推荐