首先需要了解一下ASCII编码。下文转自:http://blogger.org.cn/blog/more.asp?name=silenceZRY&id=10239
silenceZRY发表于 2005-11-29 10:22:26
数字代表计算机的语言。您的计算机如何使用字母来与程序和其他计算机进行通信?一种方法是把字符集 (字符集:一组共享一些关系的字母、数字和其他字符。例如,标准 ASCII 字符集包括字母、数字、符号和组成 ASCII 代码方案的控制代码。)转换为数字形式。
在 20 世纪 60 年代,标准化的需要带来了美国标准信息交换码 (ASCII) (ASCII:将英语中的字符表示为数字的代码。为每个字符分配一个介于 0 到 127 之间的数字。大多数计算机都使用 ASCII 表示文本和在计算机之间传输数据。)(发音为 ask-kee)。ASCII 表包含 128 个数字,分配给了相应的字符 (字符:字母、数字、标点或符号。)。ASCII 为计算机提供了一种存储数据和与其他计算机及程序交换数据的方式。
ASCII 表上的数字 0–31 分配给了控制字符,用于控制像打印机等一些外围设备。例如,12 代表换页/新页功能。此命令指示打印机跳到下一页的开头。
ASCII 非打印控制字符表
进制
字符
进制
字符
0
00
空
16
10
数据链路转意
1
01
头标开始
17
11
设备控制 1
2
02
正文开始
18
12
设备控制 2
3
03
正文结束
19
13
设备控制 3
4
04
传输结束
20
14
设备控制 4
5
05
查询
21
15
反确认
6
06
确认
22
16
同步空闲
7
07
震铃
23
17
传输块结束
8
08
backspace
24
18
取消
9
09
水平制表符
25
19
媒体结束
10
0A
换行/新行
26
1A
替换
11
0B
竖直制表符
27
1B
转意
12
0C
换页/新页
28
1C
文件分隔符
13
0D
回车
29
1D
组分隔符
14
0E
移出
30
1E
记录分隔符
15
0F
移入
31
1F
单元分隔符
数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字 127 代表 DELETE 命令。
ASCII 打印字符表
进制
字符
进制
字符
进制
字符
32
20
space
64
40
@
96
60
`
33
21
!
65
A
97
a
34
22
"
66
B
98
b
35
23
#
67
C
99
c
36
24
$
68
D
100
d
37
25
%
69
E
101
e
38
26
&
70
F
102
f
39
27
'
71
G
103
g
40
28
(
72
H
104
h
41
29
)
73
I
105
i
42
2A
*
74
J
106
j
43
2B
+
75
K
107
k
44
2C
,
76
L
108
l
45
2D
-
77
M
109
m
46
2E
.
78
4F
N
110
n
47
2F
/
79
5F
O
111
6F
o
48
30
0
80
50
P
112
70
p
49
1
81
51
Q
113
q
50
2
82
52
R
114
r
51
3
83
53
S
115
s
52
4
84
54
T
116
t
53
5
85
55
U
117
u
54
6
86
56
V
118
v
55
7
87
57
w
119
w
56
8
88
58
X
120
x
57
9
89
59
Y
121
y
58
:
90
5A
Z
122
z
59
;
91
5B
[
123
{
60
<
92
5C
\
124
|
61
=
93
5D
]
125
}
62
>
94
5E
^
126
~
63
3F
?
95
5F
_
127
70
DEL
ASCII码与汉字编码
一、ASCII码是计算机进行信息交换的最基本字符标准,例如,键盘与计算机主机之间的通信就是靠ASCII的标准来支持的。 例如:大写字母A的ASCII码就是十进制数65,数字0的ASCII就是48,小写字母a的ASCII码就是十进制数97等。
二、汉字机内码与国标码的换算关系。
把国标码的汉字代码中的区码与位码分别换算为16进制数,然后再分别加上十六进制数80,即为该汉字的机内码。
按:是不是可以这样理解,上面提到ASCII码从0到127代表的符号(也叫半角,即1个字节),汉字占2个字节,每个字节加上十六进制80,相当于十进制的128,即在原来的半角字符外的空间里表示汉字(也叫全角,即2个字节)。这里应该指的是unicode编码,汉字字符的utf-8编码是三个字节的,即24位。
在网络中有很多地方都有采用UTF8编码,由于要编写与邮件服务端有关的程序,而邮件服务端有些地方用到了UTF8编码,所以对它有了初步的认识!
它其实和Unicode是同类,就是在编码方式上不同!
首先UTF8编码后的大小是不一定,不像Unicode编码后的大小是一样的!
我们先来看Unicode的编码:一个英文字母 “a” 和一个汉字 “好”,编码后都是占用的空间大小是一样的,都是两个字节!
而UTF8编码:一个英文字母“a” 和一个汉字 “好”,编码后占用的空间大小就不样了,前者是一个字节,后者是三个字节!
现在就让我们来看看UTF8编码的原理吧:
因为一个字母还有一些键盘上的符号加起来只用二进制七位就可以表示出来,而一个字节就是八位,所以UTF8就用一个字节来表式字母和一些键盘上的符号。然而当我们拿到被编码后的一个字节后怎么知道它的组成?它有可能是英文字母的一个字节,也有可能是汉字的三个字节中的一个字节!所以,UTF8是有标志位的!
当要表示的内容是7位的时候就用一个字节:0******* 第一个0为标志位,剩下的空间正好可以表示ASCII0-127的内容。
当要表示的内容在8到11位的时候就用两个字节:110***** 10****** 第一个字节的110和第二个字节的10为标志位。
当要表示的内容在12到16位的时候就用三个字节:1110***** 10****** 10****** 和上面一样,第一个字节的1110和第二、三个字节的10都是标志位,剩下的空间正好可以表示汉字。
以此类推:
四个字节:11110**** 10****** 10****** 10******
五个字节:111110*** 10****** 10****** 10****** 10******
六个字节:1111110** 10****** 10****** 10****** 10****** 10******
.............................................
..............................................
明白了没有?
编码的方法是从低位到高位
现在就让我们来看看实例吧!
黄色为标志位
其它着色为了显示其,编码后的位置
Unicode十六进制 |
Unicode二进制 |
UTF8二进制 |
UTF8十六进制 |
UTF8字节数 |
B |
00001011 |
00001010 |
B |
1 |
9D |
00010011101 |
11000010 10011101 |
C2 9D |
2 |
A89E |
10101000 10011110 |
11101010 10100010 10011110 |
EA A2 9E |
3 |