前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >ASCII 与 Unicode:两种字符编码的定义和不同

ASCII 与 Unicode:两种字符编码的定义和不同

作者头像
CSDN-Z
发布2025-02-18 12:18:58
发布2025-02-18 12:18:58
590
举报
文章被收录于专栏:AIGC

💯前言

  • 在计算机科学和编程语言中,字符编码是非常重要的概念。它定义了计算机如何表示和存储文本信息。在不同的编程语言中,字符的表示方法可能有所不同。C语言使用ASCII编码表示字符,而Java则使用Unicode编码。这两者虽然都是字符编码,但它们有很大的不同,尤其是在字符集的范围、表示方法以及支持的语言字符种类等方面。 本文将详细解释ASCII和Unicode的定义、历史背景、两者之间的主要区别以及它们在C语言和Java中的应用。通过详细的分析和例子,我们将帮助读者更好地理解这两种编码标准,以及它们如何影响不同语言中的字符表示。 Java

💯一、ASCII编码详解

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

0

0x00

NUL

32

0x20

(space)

64

0x40

@

96

0x60

`

128

0x80

Ç

160

0xA0

1

0x01

SOH

33

0x21

!

65

0x41

A

97

0x61

a

129

0x81

ü

161

0xA1

¡

2

0x02

STX

34

0x22

"

66

0x42

B

98

0x62

b

130

0x82

é

162

0xA2

¢

3

0x03

ETX

35

0x23

#

67

0x43

C

99

0x63

c

131

0x83

â

163

0xA3

£

4

0x04

EOT

36

0x24

$

68

0x44

D

100

0x64

d

132

0x84

ä

164

0xA4

¤

5

0x05

ENQ

37

0x25

%

69

0x45

E

101

0x65

e

133

0x85

å

165

0xA5

¥

6

0x06

ACK

38

0x26

&

70

0x46

F

102

0x66

f

134

0x86

æ

166

0xA6

¦

7

0x07

BEL

39

0x27

71

0x47

G

103

0x67

g

135

0x87

ô

167

0xA7

§

8

0x08

BS

40

0x28

(

72

0x48

H

104

0x68

h

136

0x88

ö

168

0xA8

¨

9

0x09

TAB

41

0x29

)

73

0x49

I

105

0x69

i

137

0x89

ù

169

0xA9

©

10

0x0A

LF

42

0x2A

*

74

0x4A

J

106

0x6A

j

138

0x8A

ú

170

0xAA

®

11

0x0B

VT

43

0x2B

+

75

0x4B

K

107

0x6B

k

139

0x8B

ñ

171

0xAB

¬

12

0x0C

FF

44

0x2C

,

76

0x4C

L

108

0x6C

l

140

0x8C

Ñ

172

0xAC

­

13

0x0D

CR

45

0x2D

-

77

0x4D

M

109

0x6D

m

141

0x8D

Ô

173

0xAD

­

14

0x0E

SO

46

0x2E

.

78

0x4E

N

110

0x6E

n

142

0x8E

Ö

174

0xAE

®

15

0x0F

SI

47

0x2F

/

79

0x4F

O

111

0x6F

o

143

0x8F

×

175

0xAF

°

16

0x10

DLE

48

0x30

0

80

0x50

P

112

0x70

p

144

0x90

Ø

176

0xB0

¨

17

0x11

DC1

49

0x31

1

81

0x51

Q

113

0x71

q

145

0x91

ø

177

0xB1

±

18

0x12

DC2

50

0x32

2

82

0x52

R

114

0x72

r

146

0x92

œ

178

0xB2

²

19

0x13

DC3

51

0x33

3

83

0x53

S

115

0x73

s

147

0x93

Œ

179

0xB3

³

20

0x14

DC4

52

0x34

4

84

0x54

T

116

0x74

t

148

0x94

ª

180

0xB4

´

21

0x15

NAK

53

0x35

5

85

0x55

U

117

0x75

u

149

0x95

º

181

0xB5

µ

22

0x16

SYN

54

0x36

6

86

0x56

V

118

0x76

v

150

0x96

û

182

0xB6

23

0x17

ETB

55

0x37

7

87

0x57

W

119

0x77

w

151

0x97

Ü

183

0xB7

·

24

0x18

CAN

56

0x38

8

88

0x58

X

120

0x78

x

152

0x98

¯

184

0xB8

¨

25

0x19

EM

57

0x39

9

89

0x59

Y

121

0x79

y

153

0x99

˙

185

0xB9

¹

26

0x1A

SUB

58

0x3A

:

90

0x5A

Z

122

0x7A

z

154

0x9A

186

0xBA

º

27

0x1B

ESC

59

0x3B

;

91

0x5B

[

123

0x7B

{

155

0x9B

¯

187

0xBB

»

28

0x1C

FS

60

0x3C

<

92

0x5C

\

124

0x7C

156

0x9C

188

0xBC

29

0x1D

GS

61

0x3D

=

93

0x5D

]

125

0x7D

}

157

0x9D

189

0xBD

½

30

0x1E

RS

62

0x3E

>

94

0x5E

^

126

0x7E

~

158

0x9E

π

190

0xBE

¾

31

0x1F

US

63

0x3F

?

95

0x5F

_

127

0x7F

DEL

159

0x9F

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种用于电子通信的字符编码标准,它为计算机系统和设备提供了一个统一的字符集。ASCII码最初由美国国家标准协会(ANSI)于1960年代制定,最初用于电传打字机。它是以7位二进制编码表示字符,其中包含了128个字符,包括英文字母、数字、标点符号以及一些控制字符(如回车、换行等)。

1.1 ASCII的组成

  • 控制字符(0到31):这些字符通常不会在屏幕上显示出来,而是用于控制设备的行为。比如:
    • 0 - Null字符:用于标记字符串的结束。
    • 7 - Bell:产生响铃声。
    • 10 - Line Feed(LF):换行符。
    • 13 - Carriage Return(CR):回车符。
  • 可打印字符(32到126):这些字符可以直接显示出来,包括字母、数字、标点符号等。例如:
    • 32 - 空格符
    • 48-57 - 数字字符(‘0’到’9’)
    • 65-90 - 大写字母(‘A’到’Z’)
    • 97-122 - 小写字母(‘a’到’z’)
    • 33 - 感叹号(!
    • 46 - 句点(.

1.2 ASCII的局限性

由于ASCII码仅使用7位编码,它的字符集仅能表示128个字符,主要包括英语字符和一些符号、控制字符。这意味着ASCII无法表示中文、日文、阿拉伯文等其他语言的字符,也无法表示诸如表情符号、数学符号等非英文字符。因此,随着全球化的需求,ASCII逐渐显示出其不足之处。


💯二、Unicode编码详解

此表列出了包括 ASCII 范围内以及 Unicode 的扩展字符(如拉丁字母扩展)的一些字符。Unicode 编码表的实际内容远比这更庞大,涵盖全球几乎所有语言和符号。

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

Dec

Hex

Char

0

0x00

NUL

32

0x20

(space)

64

0x40

@

96

0x60

`

128

0x80

Ç

160

0xA0

1

0x01

SOH

33

0x21

!

65

0x41

A

97

0x61

a

129

0x81

ü

161

0xA1

¡

2

0x02

STX

34

0x22

"

66

0x42

B

98

0x62

b

130

0x82

é

162

0xA2

¢

3

0x03

ETX

35

0x23

#

67

0x43

C

99

0x63

c

131

0x83

â

163

0xA3

£

4

0x04

EOT

36

0x24

$

68

0x44

D

100

0x64

d

132

0x84

ä

164

0xA4

¤

5

0x05

ENQ

37

0x25

%

69

0x45

E

101

0x65

e

133

0x85

å

165

0xA5

¥

6

0x06

ACK

38

0x26

&

70

0x46

F

102

0x66

f

134

0x86

æ

166

0xA6

¦

7

0x07

BEL

39

0x27

71

0x47

G

103

0x67

g

135

0x87

ô

167

0xA7

§

8

0x08

BS

40

0x28

(

72

0x48

H

104

0x68

h

136

0x88

ö

168

0xA8

¨

9

0x09

TAB

41

0x29

)

73

0x49

I

105

0x69

i

137

0x89

ù

169

0xA9

©

10

0x0A

LF

42

0x2A

*

74

0x4A

J

106

0x6A

j

138

0x8A

ú

170

0xAA

®

11

0x0B

VT

43

0x2B

+

75

0x4B

K

107

0x6B

k

139

0x8B

ñ

171

0xAB

¬

12

0x0C

FF

44

0x2C

,

76

0x4C

L

108

0x6C

l

140

0x8C

Ñ

172

0xAC

­

13

0x0D

CR

45

0x2D

-

77

0x4D

M

109

0x6D

m

141

0x8D

Ô

173

0xAD

­

14

0x0E

SO

46

0x2E

.

78

0x4E

N

110

0x6E

n

142

0x8E

Ö

174

0xAE

®

15

0x0F

SI

47

0x2F

/

79

0x4F

O

111

0x6F

o

143

0x8F

×

175

0xAF

°

16

0x10

DLE

48

0x30

0

80

0x50

P

112

0x70

p

144

0x90

Ø

176

0xB0

¨

17

0x11

DC1

49

0x31

1

81

0x51

Q

113

0x71

q

145

0x91

ø

177

0xB1

±

18

0x12

DC2

50

0x32

2

82

0x52

R

114

0x72

r

146

0x92

œ

178

0xB2

²

19

0x13

DC3

51

0x33

3

83

0x53

S

115

0x73

s

147

0x93

Œ

179

0xB3

³

20

0x14

DC4

52

0x34

4

84

0x54

T

116

0x74

t

148

0x94

ª

180

0xB4

´

21

0x15

NAK

53

0x35

5

85

0x55

U

117

0x75

u

149

0x95

º

181

0xB5

µ

22

0x16

SYN

54

0x36

6

86

0x56

V

118

0x76

v

150

0x96

û

182

0xB6

23

0x17

ETB

55

0x37

7

87

0x57

W

119

0x77

w

151

0x97

Ü

183

0xB7

·

24

0x18

CAN

56

0x38

8

88

0x58

X

120

0x78

x

152

0x98

¯

184

0xB8

¨

25

0x19

EM

57

0x39

9

89

0x59

Y

121

0x79

y

153

0x99

˙

185

0xB9

¹

26

0x1A

SUB

58

0x3A

:

90

0x5A

Z

122

0x7A

z

154

0x9A

186

0xBA

º

27

0x1B

ESC

59

0x3B

;

91

0x5B

[

123

0x7B

{

155

0x9B

¯

187

0xBB

»

28

0x1C

FS

60

0x3C

<

92

0x5C

\

124

0x7C

156

0x9C

188

0xBC

29

0x1D

GS

61

0x3D

=

93

0x5D

]

125

0x7D

}

157

0x9D

189

0xBD

½

30

0x1E

RS

62

0x3E

>

94

0x5E

^

126

0x7E

~

158

0x9E

π

190

0xBE

¾

31

0x1F

US

63

0x3F

?

95

0x5F

_

127

0x7F

DEL

159

0x9F

Unicode是为了解决ASCII编码的局限性而设计的一种字符编码标准。Unicode的目标是能够表示全球所有语言的字符。与ASCII仅支持英语字符不同,Unicode支持几乎所有的语言字符、符号、数学符号、表情符号、历史文献字符等。

Unicode最初由Unicode联盟于1991年发布,采用16位或更高位数的编码,可以表示更多的字符。它为每个字符分配一个唯一的码点(code point),通常用“U+”加上一个十六进制数字来表示。例如,字符"A"的Unicode码点是U+0041。

2.1 Unicode编码方式

Unicode采用了不同的编码方式来表示字符,其中最常见的有三种:UTF-8UTF-16UTF-32

  • UTF-8:一种变长编码方式,使用1到4个字节来表示字符。UTF-8与ASCII兼容,对于ASCII字符(0-127),它只使用1个字节,而对于其他字符,UTF-8则使用2到4个字节。
  • UTF-16:通常使用2个字节(16位)表示字符,对于一些不常见的字符使用代理对(surrogate pairs)来表示。
  • UTF-32:每个字符都使用4个字节(32位)表示,适用于内部处理,但存储效率较低。

2.2 Unicode的字符范围

Unicode字符集的范围非常广泛。当前版本的Unicode可以表示超过100万个字符,但实际上使用的字符还远远没有达到这个数量。Unicode字符集将字符划分为多个块,每个块包含了与特定语言、符号或用途相关的字符。例如:

  • 基本拉丁字母:U+0000到U+007F(包括ASCII字符)
  • 拉丁扩展-A:U+0080到U+00FF
  • 汉字(CJK):U+4E00到U+9FFF
  • 表情符号:U+1F600到U+1F64F
  • 数学符号:U+2200到U+22FF

💯三、ASCII与Unicode的主要区别

ASCII 表(美国标准信息交换码)只有 128 个字符(从 0 到 127),其中包含了控制字符、数字、字母和常见符号。

而 Unicode 表 是一个更广泛的字符编码标准,旨在涵盖所有书写系统、符号和字符。Unicode 不仅包括 ASCII 中的字符,还包括许多其他符号、字母、汉字等字符。Unicode 是兼容 ASCII 的,在 Unicode 中,前 128 个字符与 ASCII 是相同的,但其余的字符与 ASCII 完全不同。

因此,ASCII 是 Unicode 的一个子集,但 Unicode 远比 ASCII 大得多,涵盖了更多字符。

特性

ASCII

Unicode

编码位数

7位(标准ASCII为7位,扩展ASCII为8位)

16位、32位或更大的编码(支持变长)

字符范围

128个字符(0-127)

可表示超过百万个字符

支持语言

仅支持英语字符,无法处理其他语言

支持全球多种语言(如中文、日文、韩文等)

存储效率

使用1个字节

根据编码方式不同,存储效率不一(UTF-8变长,UTF-16和UTF-32较大)

兼容性

不支持其他语言字符

完全支持ASCII,并能够兼容各种语言和符号

3.1 语言支持

  • ASCII:由于ASCII字符集仅包含128个字符,主要涵盖了英语字母、数字、常用符号和控制字符,因此它只能用于英文环境。对于其他语言(如中文、日文等),无法直接表示。
  • Unicode:Unicode支持全球几乎所有的语言字符,包括中文、日文、韩文、阿拉伯文等,甚至包括表情符号、数学符号、古代文字等。Unicode的广泛支持使其成为全球范围内的标准字符编码。

3.2 存储和编码

  • ASCII:每个字符仅占用1个字节(8位),因此在表示简单字符时,它的存储空间非常高效。
  • Unicode:由于Unicode字符集非常庞大,编码方式也相应多样化。UTF-8是变长编码,它会根据字符的需求使用1到4个字节,而UTF-16通常使用2个字节,UTF-32使用4个字节来表示一个字符。

💯四、C语言中的ASCII与Java中的Unicode

4.1 C语言中的字符表示

在C语言中,字符通常通过char类型表示,该类型默认使用ASCII编码。C语言的char类型通常占用1个字节,因此它只能表示ASCII字符集中的128个字符。如果要表示非ASCII字符,通常需要使用扩展的字符编码方案,例如UTF-8或UTF-16。

4.2 Java中的字符表示

Java中的字符使用char类型表示,而char类型是基于UTF-16编码的。Java中的char占用2个字节(16位),因此它可以表示常用的字符,包括ASCII字符、拉丁字母、中文字符等。对于Unicode的超出基本多语言平面的字符,Java通过代理对(surrogate pairs)机制来表示。

💯总结

  • ASCII编码适用于英文字符和一些符号,局限性较大,只能表示128个字符,适用于早期的计算机系统和简单的字符表示。
  • Unicode提供了全球化的字符支持,能够表示所有已知语言的字符、符号和表情符号,支持不同的编码方式如UTF-8、UTF-16、UTF-32,适用于现代的跨平台编程环境。
  • C语言使用ASCII编码表示字符,主要局限于英文字符,若要处理其他语言字符需要借助扩展编码;而Java使用Unicode(UTF-16)编码,可以直接支持多语言字符,具有更强的跨语言支持能力。

通过理解ASCII和Unicode的差异及其在不同编程语言中的应用,我们可以更好地应对在全球化、多语言应用环境中的字符处理问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 💯前言
  • 💯一、ASCII编码详解
    • 1.1 ASCII的组成
    • 1.2 ASCII的局限性
  • 💯二、Unicode编码详解
    • 2.1 Unicode编码方式
    • 2.2 Unicode的字符范围
  • 💯三、ASCII与Unicode的主要区别
    • 3.1 语言支持
    • 3.2 存储和编码
  • 💯四、C语言中的ASCII与Java中的Unicode
    • 4.1 C语言中的字符表示
    • 4.2 Java中的字符表示
  • 💯总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档