← Here 文档 | 编码 →
对我们来说,像 "Hello world
" 这样的字符串看起来像是一系列字母,中间有一个空格。 然而,对您的计算机来说,每个字符串——实际上,所有东西——都是一系列数字。
在我们的示例中,字符串 "Hello world
" 的每个 字符 都用 0 到 127 之间的数字表示。 例如,对计算机来说,大写字母 "H
" 被编码为数字 72,而空格被编码为数字 32。 ASCII 标准最初是为发送 电报 而开发的,它指定了用于表示每个字符的数字。
在大多数类 Unix 操作系统上,您可以在 shell 提示符下键入 "man ascii
" 来查看 ASCII 代码的整个图表。 维基百科 关于 ASCII 的页面也列出了 ASCII 代码。 使用 ASCII 图表,我们发现我们的字符串 "Hello world
" 被转换为以下一系列 ASCII 代码。
H e l l o space w o r l d
72 101 108 108 111 32 119 111 114 108 100
您也可以使用 Ruby 1.8 中的 ?
运算符来确定字符的 ASCII 代码。
puts ?H
puts ?e
puts ?l
puts ?l
puts ?o
问号语法 在 Ruby 1.9 中不再起作用。 相反,请使用 ord 方法。
puts "H".ord
puts "e".ord
puts "l".ord
puts "l".ord
puts "o".ord
请注意,该程序的输出(如下)与 "Hello world
" 的 "Hello
" 部分的 ASCII 代码相匹配。
$ hello-ascii.rb
72
101
108
108
111
要获取空格的 ASCII 值,我们需要使用它的 转义序列。 事实上,我们可以使用任何转义序列与 ?
运算符一起使用。
puts ?\s
puts ?\t
puts ?\b
puts ?\a
如上所述,在 Ruby >= 1.9 中使用
puts "\s".ord
puts "\t".ord
puts "\b".ord
puts "\a".ord
代替。
结果
32
9
8
7
您可能没有意识到,到目前为止,您一直在一个名为终端模拟器的程序中运行您的 Ruby 程序——例如 Microsoft Windows 控制台,Mac OS X 终端 应用程序,telnet 客户端,rxvt 或 X Window System 程序,如 xterm。
当您的 Ruby 程序打印字母 "H
" 时,它会将 "H
" (72) 的 ASCII 代码发送到终端模拟器,然后终端模拟器会绘制一个 "H
"。 当您的 Ruby 程序打印一个 响铃字符 时,它会将另一个 ASCII 代码——ASCII 代码 7——发送到终端模拟器。 在这种情况下,终端模拟器不会绘制符号,而是通常会 发出哔哔声 或短暂闪烁。 每种代码如何解释在很大程度上取决于 ASCII 标准。
ASCII 标准是一种 字符编码。 如上所述,ASCII 仅使用数字 0 到 127 来定义字符。 世界上还有很多其他字符。 其他字符编码系统——例如 Latin-1,Shift_JIS 和 Unicode 转换格式 (UTF)——已经创建,以表示更广泛的字符,包括在 阿拉伯语、希伯来语、汉语 和 日语 等语言中找到的字符。
二进制 |
八进制 |
十进制 |
十六进制 |
字形 |
010 0000 |
040 |
32 |
20 |
?
|
010 0001 |
041 |
33 |
21 |
!
|
010 0010 |
042 |
34 |
22 |
"
|
010 0011 |
043 |
35 |
23 |
#
|
010 0100 |
044 |
36 |
24 |
$
|
010 0101 |
045 |
37 |
25 |
%
|
010 0110 |
046 |
38 |
26 |
&
|
010 0111 |
047 |
39 |
27 |
'
|
010 1000 |
050 |
40 |
28 |
(
|
010 1001 |
051 |
41 |
29 |
)
|
010 1010 |
052 |
42 |
2A |
*
|
010 1011 |
053 |
43 |
2B |
+
|
010 1100 |
054 |
44 |
2C |
,
|
010 1101 |
055 |
45 |
2D |
-
|
010 1110 |
056 |
46 |
2E |
.
|
010 1111 |
057 |
47 |
2F |
/
|
011 0000 |
060 |
48 |
30 |
0
|
011 0001 |
061 |
49 |
31 |
1
|
011 0010 |
062 |
50 |
32 |
2
|
011 0011 |
063 |
51 |
33 |
3
|
011 0100 |
064 |
52 |
34 |
4
|
011 0101 |
065 |
53 |
35 |
5
|
011 0110 |
066 |
54 |
36 |
6
|
011 0111 |
067 |
55 |
37 |
7
|
011 1000 |
070 |
56 |
38 |
8
|
011 1001 |
071 |
57 |
39 |
9
|
011 1010 |
072 |
58 |
3A |
:
|
011 1011 |
073 |
59 |
3B |
;
|
011 1100 |
074 |
60 |
3C |
<
|
011 1101 |
075 |
61 |
3D |
=
|
011 1110 |
076 |
62 |
3E |
>
|
011 1111 |
077 |
63 |
3F |
?
|
|
二进制 |
八进制 |
十进制 |
十六进制 |
字形 |
100 0000 |
100 |
64 |
40 |
@
|
100 0001 |
101 |
65 |
41 |
A
|
100 0010 |
102 |
66 |
42 |
B
|
100 0011 |
103 |
67 |
43 |
C
|
100 0100 |
104 |
68 |
44 |
D
|
100 0101 |
105 |
69 |
45 |
E
|
100 0110 |
106 |
70 |
46 |
F
|
100 0111 |
107 |
71 |
47 |
G
|
100 1000 |
110 |
72 |
48 |
H
|
100 1001 |
111 |
73 |
49 |
I
|
100 1010 |
112 |
74 |
4A |
J
|
100 1011 |
113 |
75 |
4B |
K
|
100 1100 |
114 |
76 |
4C |
L
|
100 1101 |
115 |
77 |
4D |
M
|
100 1110 |
116 |
78 |
4E |
N
|
100 1111 |
117 |
79 |
4F |
O
|
101 0000 |
120 |
80 |
50 |
P
|
101 0001 |
121 |
81 |
51 |
Q
|
101 0010 |
122 |
82 |
52 |
R
|
101 0011 |
123 |
83 |
53 |
S
|
101 0100 |
124 |
84 |
54 |
T
|
101 0101 |
125 |
85 |
55 |
U
|
101 0110 |
126 |
86 |
56 |
V
|
101 0111 |
127 |
87 |
57 |
W
|
101 1000 |
130 |
88 |
58 |
X
|
101 1001 |
131 |
89 |
59 |
Y
|
101 1010 |
132 |
90 |
5A |
Z
|
101 1011 |
133 |
91 |
5B |
[
|
101 1100 |
134 |
92 |
5C |
\
|
101 1101 |
135 |
93 |
5D |
]
|
101 1110 |
136 |
94 |
5E |
^
|
101 1111 |
137 |
95 |
5F |
_
|
|
二进制 |
八进制 |
十进制 |
十六进制 |
字形 |
110 0000 |
140 |
96 |
60 |
`
|
110 0001 |
141 |
97 |
61 |
a
|
110 0010 |
142 |
98 |
62 |
b
|
110 0011 |
143 |
99 |
63 |
c
|
110 0100 |
144 |
100 |
64 |
d
|
110 0101 |
145 |
101 |
65 |
e
|
110 0110 |
146 |
102 |
66 |
f
|
110 0111 |
147 |
103 |
67 |
g
|
110 1000 |
150 |
104 |
68 |
h
|
110 1001 |
151 |
105 |
69 |
i
|
110 1010 |
152 |
106 |
6A |
j
|
110 1011 |
153 |
107 |
6B |
k
|
110 1100 |
154 |
108 |
6C |
l
|
110 1101 |
155 |
109 |
6D |
m
|
110 1110 |
156 |
110 |
6E |
n
|
110 1111 |
157 |
111 |
6F |
o
|
111 0000 |
160 |
112 |
70 |
p
|
111 0001 |
161 |
113 |
71 |
q
|
111 0010 |
162 |
114 |
72 |
r
|
111 0011 |
163 |
115 |
73 |
s
|
111 0100 |
164 |
116 |
74 |
t
|
111 0101 |
165 |
117 |
75 |
u
|
111 0110 |
166 |
118 |
76 |
v
|
111 0111 |
167 |
119 |
77 |
w
|
111 1000 |
170 |
120 |
78 |
x
|
111 1001 |
171 |
121 |
79 |
y
|
111 1010 |
172 |
122 |
7A |
z
|
111 1011 |
173 |
123 |
7B |
{
|
111 1100 |
174 |
124 |
7C |
|
|
111 1101 |
175 |
125 |
7D |
}
|
111 1110 |
176 |
126 |
7E |
~
|
|