# 확장 이진화 십진법 교환 부호

EBCDIC 인코딩 계열| 분류 | 8비트 베이식 라틴 인코딩 (ASCII 아님) |
| 이전 인코딩 | BCD |
| * v
* t
* e
 |

**확장 이진화 십진법 교환 부호**(EBCDIC, **E**xtended **B**inary **C**oded **D**ecimal **I**nterchange **C**ode)는 IBM 메인프레임용 운영 체제인 z/OS, OS/390, VM 운영 체제, VSE 운영 체제와 IBM의 중급 컴퓨터 운영 체제인 OS/400과 i5/OS 등에서 사용되는 8비트 문자 인코딩(코드 페이지)이다(BCD 참조). 또한 후지쯔-지멘스의 BS2000/OSD나 휴렛 패커드의 MPE/iX, 유니시스의 MCP 등 IBM 외 플랫폼에서도 사용된다. EBCDIC은 천공 카드에서 사용하던 코드와 1950년대 후반에서 1960년대 초에 나온 대부분의 IBM 컴퓨터 주변 기기에서 사용됐던 6비트 이진화 십진법 부호에서 유래하였다.

## 역사

EBCDIC('엡시딕'으로 읽는다)은 IBM에서 1963년과 1964년에 걸쳐 고안되었고 IBM System/360 계열의 메인프레임 컴퓨터와 함께 소개되었다. 별도로 개발된 7비트 인코딩 방식인 ASCII와 달리 8비트 문자열 인코딩이다. 천공 카드 상의 두 "존(zone)"과 "숫자"를 6비트에 인코딩하는 효율적인 방법으로 고안된 기존 IBM 이진화 십진법 인코딩을 확장하기 위해 만들어졌다.

IBM은 ASCII 표준화 위원회의 주요 지지자였지만 ASCII 주변장치(일례로 카드 천공기)를 System/360 출시에 맞춰 내어 놓을 수 없었다. IBM은 이 때문에 당시 EBCDIC을 사용할 수 밖에 없었다. System/360은 큰 성공을 거뒀고 자연히 EBCDIC도 널리 사용되었다.

z시리즈나 i시리즈에 사용된 리눅스 외에 모든 IBM 메인프레임 주변장치와 운영 체제는 고유 인코딩으로 EBCDIC를 사용한다.하지만 소프트웨어 수준에서는 다른 인코딩 간 변환이 가능하다. 많은 하드웨어 주변장치 역시 인코딩 간 변환을 지원하며, IBM z시리즈 같은 최신 메인프레임은 하드웨어 수준에서 서로 다른 문자 집합 간 변환을 빠르게 하기 위한 프로세서 명령어를 포함하고 있다.

EBCDIC은 ISO-8859 계열이나 유니코드 같은 ASCII 기반 코드 페이지에 비해 최근 기술적인 관점에서는 장점이 없다. 각 부호는 기술적으로 기발하게 설계된 부분도 있다. 일례로 ASCII와 EBCDIC은 특정 1비트만 보면 대문자인지 소문자인지 구분할 수 있게 되어 있다. 하지만 알파벳이 연속적이지 않은 등 EBCDIC은 ASCII에 비해 사용하기 어려운 측면도 있다. 단일 바이트 확장 ASCII 코드 페이지들처럼 대부분의 EBCDIC 코드 페이지를 사용할 때 하나의 데이터베이스나 텍스트 파일 내에서 최대 언어 2개까지만(즉, 영어와 또 다른 한 언어) 사용할 수 있었다.

제대로 된 다중 언어 문장을 지원하려면 훨씬 더 많은 문자들을 지원하는 시스템이 필요하다. 이를 위해서는 일반적으로 어떤 형태든 유니코드가 지원되어야 한다. 유니코드 컨소시엄에서는 UTF-EBCDIC이라는 EBCDIC 유니코드 변환 형식(Unicode Transformation Format)을 제안했으나 원래 일반적인 시스템 간 정보 교환을 위해 사용할 목적으로 설계되지 않았고, EBCDIC을 사용하는 시스템 상에서도 사용된 바가 없다. IBM 메인프레임은 UTF-16은 지원하나 UTF-EBCDIC은 지원하지 않는다.

아랍어를 위한 EBCDIC 버전들은 유니코드와 같은 최근 인코딩처럼 논리 순서대로 오른쪽에서 왼쪽에서 인코딩하는 대신, 통상 화면에 보이는 순서, 즉, 더 오래된 메인프레임이나 라인 프린터처럼 왼쪽에서 오른쪽으로 인코딩한다.

## 코드 페이지 배열

아래 표는 EBCDIC의 코드 페이즈 변형 중 하나인 CCSID 500을 기본으로 한 것으로 기본 영어 EBCDIC 문자만 표시했다. 00-3F와 FF는 제어 문자이고, 40은 공백, 41은 단어 잘림 방지 공백("RSP": "Required Space" 즉, "필요한 공백"), E1은 수치 간 공백("NSP": "Numeric Space" 즉, "숫자 공백"), CA는 소프트 하이픈(줄 바꿈 시 한 단어 중간에서 하이픈을 넣고 줄 바꿈이 가능한 위치 표시)을 나타낸다. 각 문자는 동등한 유니코드 코드를 표기했다. 모든 EBCDIC 코드 페이지에 포함되는 알파벳, 숫자, 구두점, 제어 문자는 볼드체로 표시하였다. 할당되지 않은 코드들은 보통 다양한 EBCDIC 코드 페이지 변형들에서 국제 혹은 지역 특화된 문자에 할당된다.

EBCDIC|  | —0 | —1 | —2 | —3 | —4 | —5 | —6 | —7 | —8 | —9 | —A | —B | —C | —D | —E | —F |
|   0−   | NUL 0000 0 | SOH 0001 1 | STX 0002 2 | ETX 0003 3 | SEL   4 | HT 0009 5 | RNL   6 | DEL 007F 7 | GE   8 | SPS   9 | RPT   10 | VT 000B 11 | FF 000C 12 | CR 000D 13 | SO 000E 14 | SI 000F 15 |
|   1−   | DLE 0010 16 | DC1 0011 17 | DC2 0012 18 | DC3 0013 19 | RES ENP   20 | NL 0085 21 | BS 0008 22 | POC   23 | CAN 0018 24 | EM 0019 25 | UBS   26 | CU1   27 | IFS 001C 28 | IGS 001D 29 | IRS 001E 30 | IUS ITB 001F 31 |
|   2−   | DS   32 | SOS   33 | FS   34 | WUS   35 | BYP INP   36 | LF 000A 37 | ETB 0017 38 | ESC 001B 39 | SA   40 | SFE   41 | SM SW   42 | CSP   43 | MFA   44 | ENQ 0005 45 | ACK 0006 46 | BEL 0007 47 |
|   3−   |    48 |    49 | SYN 0016 50 | IR   51 | PP   52 | TRN   53 | NBS   54 | EOT 0004 55 | SBS   56 | IT   57 | RFF   58 | CU3   59 | DC4 0014 60 | NAK 0015 61 |    62 | SUB 001A 63 |
|   4−   | SP 0020 64 | RSP 00A0 65 |     66 |     67 |     68 |     69 |     70 |     71 |     72 |     73 |     74 | . 002E 75 | < 003C 76 | ( 0028 77 | + 002B 78 | | 007C 79 |
|   5−   | & 0026 80 |     81 |     82 |     83 |     84 |     85 |     86 |     87 |     88 |     89 | ! 0021 90 | $ 0024 91 | \* 002A 92 | ) 0029 93 | ; 003B 94 | ¬ 00AC 95 |
|   6−   | - 002D 96 | / 002F 97 |     98 |     99 |     100 |     101 |     102 |     103 |     104 |     105 | ¦ 00A6 106 | , 002C 107 | % 0025 108 | \_ 005F 109 | > 003E 110 | ? 003F 111 |
|   7−   |     112 |     113 |     114 |     115 |     116 |     117 |     118 |     119 |     120 | ` 0060 121 | : 003A 122 | # 0023 123 | @ 0040 124 | ' 0027 125 | = 003D 126 | " 0022 127 |
|   8−   |     128 | **a** 0061 129 | **b** 0062 130 | **c** 0063 131 | **d** 0064 132 | **e** 0065 133 | **f** 0066 134 | **g** 0067 135 | **h** 0068 136 | **i** 0069 137 |     138 |     139 |     140 |     141 |     142 | ± 00B1 143 |
|   9−   |     144 | **j** 006A 145 | **k** 006B 146 | **l** 006C 147 | **m** 006D 148 | **n** 006E 149 | **o** 006F 150 | **p** 0070 151 | **q** 0071 152 | **r** 0072 153 |     154 |     155 |     156 |     157 |     158 |     159 |
|   A−   |     160 | ~ 007E 161 | **s** 0073 162 | **t** 0074 163 | **u** 0075 164 | **v** 0076 165 | **w** 0077 166 | **x** 0078 167 | **y** 0079 168 | **z** 007A 169 |     170 |     171 |     172 |     173 |     174 |     175 |
|   B−   | ^ 005E 176 |     177 |     178 |     179 |     180 |     181 |     182 |     183 |     184 |     185 | [ 005B 186 | ] 005D 187 |     188 |     189 |     190 |     191 |
|   C−   | { 007B 192 | **A** 0041 193 | **B** 0042 194 | **C** 0043 195 | **D** 0044 196 | **E** 0045 197 | **F** 0046 198 | **G** 0047 199 | **H** 0048 200 | **I** 0049 201 | SHY 00AD 202 |     203 |     204 |     205 |     206 |     207 |
|   D−   | } 007D 208 | **J** 004A 209 | **K** 004B 210 | **L** 004C 211 | **M** 004D 212 | **N** 004E 213 | **O** 004F 214 | **P** 0050 215 | **Q** 0051 216 | **R** 0052 217 |     218 |     219 |     220 |     221 |     222 |     223 |
|   E−   | \ 005C 224 | NSP 2007 225 | **S** 0053 226 | **T** 0054 227 | **U** 0055 228 | **V** 0056 229 | **W** 0057 230 | **X** 0058 231 | **Y** 0059 232 | **Z** 005A 233 |     234 |     235 |     236 |     237 |     238 |     239 |
|   F−   | **0** 0030 240 | **1** 0031 241 | **2** 0032 242 | **3** 0033 243 | **4** 0034 244 | **5** 0035 245 | **6** 0036 246 | **7** 0037 247 | **8** 0038 248 | **9** 0039 249 |     250 |     251 |     252 |     253 |     254 | EO   255 |

## 비판 및 유머

오픈 소스 소프트웨어 옹호자이자 해커인 에릭 레이먼드는 자신의 "자곤 파일(Jargon File)"에서 서로 닮지도 않은 다양한 EBCDIC의 다른 버전들 때문에 초기 해커와 프로그래머는 거의 예외 없이 EBCDIC을 싫어했고, IBM은 이미 자리 잡고 있던 ASCII가 있음에도 같은 목적으로 EBCDIC를 만들었다고 언급했다.

자곤 파일 4.4.7에는 EBCDIC을 다음과 같이 정의하고 있다.

|  |  |  |
| --- | --- | --- |
| “ | EBCDIC: /eb´s@·dik/, /eb´see`dik/, /eb´k@·dik/, n.
[Extended Binary Coded Decimal Interchange Code의 줄임말] IBM 공룡들에 사용되는 문자 집합이라고 주장되는 것. 서로 호환되지도 않은 적어도 6개의 버전이 있고, 모두 문자가 연속되지 않고 현대 컴퓨터 언어들에 중요한 몇몇 중요한 ASCII 구두점이 빠져 있는(정확히 어떤 문자가 없냐는 당신이 보고 있는 EBCDIC 버전에 따라 다름) 훌륭한 특성을 가지고 있다. IBM은 EBCDIC을 1960년대 초에 천공 카드에서 따왔고, 이미 자리잡은 ASCII 표준을 몰아내는 고객 제어 전략("커넥터 음모(connector conspiracy)" 참조)으로 널리 퍼뜨렸다. 오늘날 IBM은 열린 시스템 기반의 회사라고 주장하나 EBCDIC 변종들과 이들간 변환하는 방법에 대한 IBM 내부 기술은 여전히 내부적으로 일급 비밀로 분류되어 있고 읽기도 전에 타버리게 되어있다. 해커들은 EBCDIC이라는 이름만 들어도 얼굴이 창백해 지며 EBCDIC을 최고 순수 악의 현신으로 간주한다. | ” |
|   |  |

또 다른 잘 알려진 불평은 EBCDIC의 알파벳 문자가 ASCII처럼 순차적이지 않고 태고적 천공 카드의 인코딩을 따르고 있다는 것이다. 일례로 "I"에 해당하는 문자 코드를 1만큼 증가시키면 "J"에 해당하는 코드가 나오지 않는다. 마찬가지로 "R"과 "S" 사이에도 틈이 있다. 따라서 알파벳 문자만 훑는 간단한 루프를 작성하는 것조차 쉽지 않다.

이런 비호환성은 또한 많은 농담의 원인이 되었다. 잘 알려진 한 농담은 다음과 같다.

교수: "그래서 미국 정부가 암호화 표준을 만들기 위해 IBM에 갔습니다. 그리고 IBM은 그 결과로—"
학생: "EBCDIC을 내 놨죠!"
인포콤(Infocom)에서 만든 고전 모험 게임인 "Zork II"에도 EBCDIC 문자 집합이 나온다. "기계실"에 고대 컴퓨터들과 무슨 용도인지 알 수 없는 다른 기계들이 있다. 다음은 그 방에 대한 설명인데 이해할 수 없는 언어라는 것을 설명하기 위해 EBCDIC이 사용되었다.

|  |  |  |
| --- | --- | --- |
| “ | 여기는 시끄럽게 윙윙 거리는 여러 종류의 무거운 기계로 가득찬 방이다. 탄 저항 부품 냄새가 난다. 한 쪽 벽면을 따라 세 단추가 있는데 하나는 둥글고, 또 하나는 삼각형, 남은 하나는 사각형 모양이다. 당연하지만 각 단추 위에는 EBCDIC로 쓰여진 설명이 붙어 있다... | ” |

* 라틴-1-문자 집합을 포함한 EBCDIC 코드페이지
* 코드페이지 037 (영어, 포르투갈어)
* 코드페이지 285 (영국 아일랜드)
* UTF-EBCDIC

* Character Data Representation Architecture (CDRA) from IBM Contains IBM's official information on codepages and charsets.
	+ Codepage 37
	+ Codepage 1047
* F.0 Appendix F. Code Pages 보관됨 2001-03-21 - 웨이백 머신 from AS/400 International Application Development V4R2 보관됨 2001-02-15 - 웨이백 머신
* ICU Converter Explorer 보관됨 2020-01-02 - 웨이백 머신 Contains more information about EBCDIC derived from IBM's CDRA, including DBCS EBCDIC (Double Byte Character Set EBCDIC)
* ICU Charset Mapping Tables Contains computer readable Unicode mapping tables for EBCDIC and many other character sets
* ASCII/EBCDIC Conversion Table for HP 3000 MPE/iX Computer Systems
* EBCDIC character list, including decimal and hex values, symbolic name, and character/function
* iconv.com Online tool to convert from ASCII to/from EBCDIC
* EBCDIC-codepages with Latin-1-charset (JavaScript) 보관됨 2007-01-18 - 웨이백 머신