跳转到内容

Ruby 编程/ASCII

来自维基教科书,开放的书籍,为开放的世界

← 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 客户端,rxvtX Window System 程序,如 xterm

当您的 Ruby 程序打印字母 "H" 时,它会将 "H" (72) 的 ASCII 代码发送到终端模拟器,然后终端模拟器会绘制一个 "H"。 当您的 Ruby 程序打印一个 响铃字符 时,它会将另一个 ASCII 代码——ASCII 代码 7——发送到终端模拟器。 在这种情况下,终端模拟器不会绘制符号,而是通常会 发出哔哔声 或短暂闪烁。 每种代码如何解释在很大程度上取决于 ASCII 标准。

其他字符编码

[编辑 | 编辑源代码]

ASCII 标准是一种 字符编码。 如上所述,ASCII 仅使用数字 0 到 127 来定义字符。 世界上还有很多其他字符。 其他字符编码系统——例如 Latin-1Shift_JISUnicode 转换格式 (UTF)——已经创建,以表示更广泛的字符,包括在 阿拉伯语希伯来语汉语日语 等语言中找到的字符。

ASCII 图表

[编辑 | 编辑源代码]
二进制 八进制 十进制 十六进制 字形
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 ~
华夏公益教科书