BCDIC
BCDIC | |
---|---|
术语名称 | BCDIC |
英语名称 | BCDIC |
别名 | BCD交换码, BCD interchange code, 二进制编码的十进制交换码, binary-coded decimal interchange code, alphanumeric BCD |
BCDIC ,即 BCD 交换码,指历史上与 BCD 码兼容的一系列字符编码,没有明确标准。 这一编码诞生于 80 列打孔卡纸时代,是 IBM 在早期计算机系统中使用的。实际时间覆盖 1950 年代到 1960 年代初的计算机。
BCDIC 系列编码没有同一规范标准,基本只共享核心设计思想。
字符库特征
作为早期计算机,只使用数字、一套大写拉丁字母以及部分必要字符,实际编码的字符极少。
码位分配特征
由于 80 列打孔卡为 80 列× 12 行,在 BCDIC 的二进制编码之前还有过 IBM 80 列打孔卡纸编码,其中 12 行分别被标记为 12 (或 Y)、 11 、 0 、 1~9 ,如果一列只有一个 0~9 的孔,则代表对应数字,否则 1~9 中有一个孔, 12、11、0 中有一个孔,就会映射到 26 个大写字母和斜杠(打孔为 0 + 1 ,夹在 R 和 S 之间),共计 27 个码位。
为兼容以上卡纸编码, BCDIC 系列编码使用 6 个二进制位编码,并分为两部分:区域行(zone row)占高 2 位,对应 12 、 11 、 0 三选一或不选,数码行(digit row)占低 4 位,对应 1~9 中选择一个。BCDIC 系列编码中,通常将区域行为 00
的数据留给正常的 BCD 码。但是 BCDIC 会把全零留给空格,因此 0 被移动到第 10 个编码(有不移动的例外)。相对地,在后三行 0001~1001
即 1~9 的 27 个码位范围内反向排列大写字母。其余的与 0~9 不对齐的数字位 0000
及 1011~
的码位上安排符号。
仍然保持区域行打在上 3 行(0、11、12 列,顺序不一定),数码行打在下 9 行的习惯,只是变成了二进制。
码位表
由于有多种变体,本文以 48 字符[1]的版本作为主要部分。
_0 ?? 0000
|
_1 ?? 0001
|
_2 ?? 0010
|
_3 ?? 0011
|
_4 ?? 0100
|
_5 ?? 0101
|
_6 ?? 0110
|
_7 ?? 0111
|
_8 ?? 1000
|
_9 ?? 1001
|
_A ?? 1010
|
_B ?? 1011
|
_C ?? 1100
|
_D ?? 1101
|
_E ?? 1110
|
_F ?? 1111
| |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 00 ????
|
空格 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | # | @ | |||
1_ 01 ????
|
/ | S | T | U | V | W | X | Y | Z | , | % | |||||
2_ 10 ????
|
- | J | K | L | M | N | O | P | Q | R | $ | * | ||||
3_ 11 ????
|
& | A | B | C | D | E | F | G | H | I | . | ⌑ |
其中空白单元格表示这一码位在编码字符集中没有被分配给字符。
其他变体在编码区域行三个孔的顺序、 0 的处理、特殊符号的表示上有差异,基本逻辑基本是一致的。
字符编码
BDCIC 是打孔卡时代的编码方式,其最终编码到 80 列 12 行的打孔卡纸上,只是与原始的编码相比,这个版本允许同一个区域中存在多个孔。 一般把对应原来 12、11、0 这一区域的高 2 位部分打到 12、11、0 三位,对应原来 1~9 这一区域的低 4 位部分打到 1~9 这个部分。