关于字符编码

2021-12-02 12:50:59 浏览数 (1)

如转发,请标明出处!

在计算机中,所有的数据在存储和运算时都是使用二进制数表示。为了互相通信,就必须使用相同的编码规则。ANSI (American National Standard Institute)在1967年发表了一套单字节字符编码方案 - ASCII (American Standard Code for Information Interchange)。后来ISO (International Organization for Standardization) 和IEC (International Electrotechnical Commission)将其定为国际标准 - ISO/IEC 646

这个ISO的简称为啥不是IOS呢

这个ASCII只用到了7个bit,如果要表示中文,那肯定是不够的。所以需要某种多字节编码方案

GB 2312-80 是1980年制定的中国汉字编码国家标准。共收录 7445 个字符。GB2312 兼容标准 ASCII码,而一个汉字占用两个字节,每个字节的最高位为 1。具体办法是:收集了 7445 个字符,组成 94*94 的方阵,每一行称为一个“区”,每一列称为一个“位”,区号位号的范围均为 01-94,区号和位号组成的代码称为区位码,编码范围是0x0101~0x5E5E。将区号和位号分别加上0x20,称为国标码,编码范围就是0x2121~0x7E7E。为了兼容ASCII码,再给国标码的每个字节加0x80,形成机内码,简称内码,是汉字在机器中实际的存储代码。因此GB2312-80标准的内码范围是0xA1A1~0xFEFE

GBK 即汉字内码扩展规范,共收入 21886 个汉字和图形符号,向下与 GB 2312 完全兼容,向上支持 ISO 10646 国际标准。GBK 采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线

GB 18030,国家标准 GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集。GB 18030 与 GB 2312-1980 和 GBK 兼容,共收录汉字70244个。GB 18030采用多字节编码,每个字可以由 1 个、2 个或 4 个字节组成。编码空间庞大,最多可定义 161 万个字符。支持少数民族的文字、繁体汉字以及日韩字。单字节,其值从 0 到 0x7F,与 ASCII 编码兼容。双字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x40 到 0xFE(不包括0x7F),与 GBK 标准兼容。四字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x30 到 0x39,第三个字节从0x81 到 0xFE,第四个字节从 0x30 到 0x39

Big5,又称为大五码或五大码,是使用繁体中文社区中最常用的电脑汉字字符集标准,共收录13,060个汉字。Big5码是一套双字节字符集,第一个字节称为“高位字节”,第二个字节称为“低位字节”。“高位字节”使用了0x81-0xFE,“低位字节”使用了0x40-0x7E,及0xA1-0xFE

https://home.unicode.org/

Unicode,统一码、万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。早期的Unicode字符集(Unicode Character Set)使用2字节编码,即UCS-2。后来又出现了4字节编码,即UCS-4

UCS在计算机中的存储格式叫做UTF(Unicode Transformation Format)

UCS-2最直接的存储格式就是UTF-16了。UTF-16是完全对应于UCS-2的,即把UCS-2规定的字符直接保存下来。而根据字符序,又分为UTF-16LE (Little Endian)和UTF-16BE (Big Endian)。那如何判断某个文件使用的是UTF-16BE还是UTF-16LE呢?可以在文件头部添加BOM(Byte Order Mark)。由于UCS-2没有定义FFFE, 因此规定只要出现FFFE就是UTF-16LE,出现FEFF就是UTF-16BE

UTF-32就简单了,它用四个字节表示字符,这样就可以完全表示UCS-4,而无需像UTF-16那样使用复杂的算法。 与UTF-16类似,UTF-32也包括UTF-32、UTF-32LE、UTF-32BE三种编码,UTF-32使用的BOM就是FFFE0000(UTF-32LE)和0000FEFF(UTF-32BE)

实际计算机中存储的字符,多数在ASCII的范围内,不管使用UTF-16还是UTF-32都会造成很大的浪费

因此,又提出了用1~4个字节来表示的UTF-8,方式如下

可见,ASCII字符(0000-007F)只使用一个字节,避免了空间的浪费。而且UTF-8不再需要BOM字节了。另外,从表中可以看出,从首字节的取值范围就可以知道编码的字节数,这样大大简化了算法

话说,制定标准的这伙儿人呀,智商实在是高

最后,留个文本的ASCII表,以供查询

ASCII值

Hex

控制/字符

0

0

NUT - null

1

1

SOH - start of headline

2

2

STX - start of text

3

3

ETX - end of text

4

4

EOT - end of transmission

5

5

ENQ - enquiry

6

6

ACK - acknowledge

7

7

BEL - bell

8

8

BS - backspace

9

9

HT - horizontal tab

10

A

LF - line feed

11

B

VT - vertical tab

12

C

FF - form feed

13

D

CR - carriage return

14

E

SO - shift out

15

F

SI - shift in

16

10

DLE - data link escape

17

11

DC1 - device control 1

18

12

DC2 - device control 2

19

13

DC3 - device control 3

20

14

DC4 - device control 4

21

15

NAK - negative acknowledge

22

16

SYN - synchronous idle

23

17

ETB - end of trans. block

24

18

CAN - cancel

25

19

EM - end of medium

26

1A

SUB - substitute

27

1B

ESC - escape

28

1C

FS - file separator

29

1D

GS - group separator

30

1E

RS - record separator

31

1F

US - unit separator

ASCII值

Hex

字符

32

20

(space)

33

21

!

34

22

"

35

23

#

36

24

$

37

25

%

38

26

&

39

27

,

40

28

(

41

29

)

42

2A

*

43

2B

44

2C

,

45

2D

-

46

2E

.

47

2F

/

48

30

0

49

31

1

50

32

2

51

33

3

52

34

4

53

35

5

54

36

6

55

37

7

56

38

8

57

39

9

58

3A

:

59

3B

;

60

3C

<

61

3D

=

62

3E

>

63

3F

?

ASCII值

Hex

字符

64

40

@

65

41

A

66

42

B

67

43

C

68

44

D

69

45

E

70

46

F

71

47

G

72

48

H

73

49

I

74

4A

J

75

4B

K

76

4C

L

77

4D

M

78

4E

N

79

4F

O

80

50

P

81

51

Q

82

52

R

83

53

S

84

54

T

85

55

U

86

56

V

87

57

W

88

58

X

89

59

Y

90

5A

Z

91

5B

[

92

5C

/

93

5D

]

94

5E

^

95

5F

_

ASCII值

Hex

字符

96

60

97

61

a

98

62

b

99

63

c

100

64

d

101

65

e

102

66

f

103

67

g

104

68

h

105

69

i

106

6A

j

107

6B

k

108

6C

l

109

6D

m

110

6E

n

111

6F

o

112

70

p

113

71

q

114

72

r

115

73

s

116

74

t

117

75

u

118

76

v

119

77

w

120

78

x

121

79

y

122

7A

z

123

7B

{

124

7C

|

125

7D

}

126

7E

`

127

7F

DEL

我是泰山 专注VX好多年

一起学习 共同进步

0 人点赞