ISO/IEC 2022

classification = 스테이트풀 인코딩 **ISO/IEC 2022**는 문자를 부호화하는 기술(techniques, 확장 기술 extension technique)로서, ISO 표준(ECMS 표준인 ECMA-35, ANSI 표준인 ANSI X3.41, 그리고 일본 산업 표준인 JIS X 0202와 같은)으로 다음과 같은 사항을 규정한다. *다중 그래픽 문자 집합과 1차 제어문자(C0)와 2차 제어문자(C1)를 포함해서, 단수 문자 체계를 포함하기도 하는, 특이한 구조의 복수 문자 체계의 하부구조(infrastructure), *이러한 문자 집합을 부호화하는 포맷(format), *각 바이트에서 7bits만을 사용하는 경우에 8bits를 다 사용하는 경우와 같은 방식으로 부호화하고, 또한 8bits 문자가 7bits 환경에서 그대로 사용될 수 있도록 하기 위한 포맷(format), *ANSI escape codes를 위한 구조, *개개의 문자 집합을 식별하기 하고, 특정 부호 기능이나 하위집합의 사용을 알리고, 다른 부호화 체계와 상호작용하고 교환하기 위한, 특별한 이스케이프(escape) 부호 포맷(format) ISO/IEC 2022 부호화에 포함된 많은 문자 집합들이 이중 바이트(double byte) 부호화인데, 2개의 바이트가 한 문자를 나타낸다. 이로 인해 ISO/IEC 2022의 부호화는 가변폭(variable width) 부호화가 된다. 그러나 어떤 특정 구현체가 표준이 정하는 모든 것을 구현할 필요는 없다. 특정 구현체에서는 자신이 지원하는 문자와 레벨이 따로 정한다. ISO/IEC 2022 표준에서 규정된 많은 메카니즘들이 자주 사용되는 것은 아니지만, 몇몇 현존 부호화 방식들은 ISO/IEC 2022 시스템의 하위집합(subset)에 기반하고 있다. 특히, ISO/IEC 2022의 7bits 부호화 시스템의 구현체로는 일본어 이메일에서 주요하게 사용된는 ISO-2022-JP(혹은 JIS 부호화)가 있다. ISO/IEC 2022의 7bits 부호화 시스템의 구현체로는 ISO/IEC 4873(ECMA-43)(이는 또한 ISO/IEC 8859가 따른다)와 동아시아(East Asia)에서 사용되는 확장 유닉스 부호(Extented Unix Code)가 있다. ISO 2022의 좀 더 특별한 응용으로는 MARC 21 라이브러리 레코드에서 사용되는 MARC-8이 있다. ISO/IEC 2022의 부호화 방식은 통상 문자 하나에 1바이트나 2바이트 이상을 쓰는 가변 문자 부호화 방식이며 한국어의 경우 EUC-KR이 이 부호화 방식을 사용한다.
# 소개
라틴 알파벳에 기반하지 않는 언어나 언어족들에는 그리스어, 키릴어, 아랍어, 히브리어 등이 있는데, 이들 언어들은 지금까지 다양한 방식의 8bits 확장 ASCII 부호화 방식으로 컴퓨터상에서 나타냈다. 동아시아 언어, 특히 한국어, 중국어, 일본어의 경우에는 그 문자들을 다 표현하기에는 8-bit 바이트로는 부족해서 처음에는 해당 언어에서 규정된 이중 바이트 부호화를 통해 표현되었다. ISO/IEC 2022는 이러한 문제를 해결하기 위해 개발되었다. 즉 단수 문자 부호화 시스템으로 다중 문자 집합의 문자 표현하는 방법과 동아시아 언어와 같은 큰 문자 집합을 표현하기 위한 방법을 개발한 것이다. ISO/IEC 2022의 두번째 요구사항은 7-bit 통신 채널들에서도 사용될 수 있어야 한다는 것이다. 비록 ISO/IEC 2022가 8-bit 부호체계이지만 8-bit 시퀀스는 정보의 손실없이 7-bit으로 다시 부화화될 수 있고, 단지 크기만 약간 커질 뿐이다. 다중 문자 집합을 표현하기 위해 ISO/IEC 2022 문자 부호화는 이스케이프 시퀀스(escape sequence)를 사용하는데, 이스케이프 시퀀스는 자신의 뒤에 오는 문자들의 문자집합을 나타낸다. 이스케이프 시퀀스는 ISO에 등록된 것이고, 표준에 의해 정의된 패턴을 따른다. 이러한 문자 부호화에서는 데이터가 진행방향으로 순서대로 처리되는데, 이는 데이타의 올바른 해석이 이전에 나타난 이스케이프 시퀀스에 의존하기 때문이다. 그러나 ISO-2022-JP 같은 다른 표준들은 라인 끝 이전에 '현 문자 집합' 을 US-ASCII로 리셋하는 여분 조건 등을 부여하기도 한다. 큰 문자 집합을 표현하기 위해 ISO/IEC 2022는 ISO/IEC 646의 속성을 이용한다. 이 속성에 의하면 하나의 7 bit 문자가 94개의 그래픽 문자(스페이스와 33개의 제어문자에 더해)를 정의한다. 2개의 바이트를 사용하면 8,836(94x94)개의 문자들을 표현할 수 있다. 3개의 바이트를 이용하면 830,584(94x94x94)개까지 문자들을 표현할 수 있다. 표준에는 비록 그렇게 정의되어 있지만, 3개의 바이트를 이용하는 등록된 문자 집합은 없다(EUC-TW의 비등록 G2는 아니지만). 2 바이트 문자 집합에서는 각 문자의 code point는 보통 *kuten* (일본어: 区点) 형식(form) (때로는 *qūwèi* (중국어: 区位)로 불리는데, 특히 GB2312와 그와 관련된 표준을 다룰 때)으로 지정되는데, 여기서 영역(zone) (区, 일본어: *ku*, 중국어: *qū*)과 그 영역에서의 해당 문자의 점(point) (일본어: 点 *ten*) 혹은 위치(position) (중국어: 位 *wèi*)이 지정된다. 그러므로 이스케이프 시퀀스는 단지 어느 문자 집합이 사용되는지만을 나타내는 것이 아니라, 문자 집합의 속성을 통해 94-, 96-, 8,836-, or 830,584-문자 (혹은 다른 크기의) 부호화가 다루어지는지를 나타낸다. 사실 문맥(contenxt)나 관례(convention)을 통해 어떤 한 국가의 문자 집합이 사용되는지를 알 수 있다면, 국가의 문자 집합을 나타내는 이스케이프 시퀀스는 없어도 된다. 예를 들어, ISO-8859-1는 이스케이프 시퀀스가 필요없다고 기술하고 있으며, ISO-2022-CN을 다루는 RFC 1922는 이스케이프 시퀀스의 명시적 사용없이 ISO-2022 SHIFT 문자가 사용되는 것을 허용한다. ISO-8859-X 문자 집합의 ISO-2022 정의는 ISO-2022로 구성된 구성요소의 고정 조합이다. 특히 하위 제어 문자들(C0), US-ASCII 문자 집합(GL), 상위 제어 문자들(C1)은 표준이고, 상위 문자들(GR)은 ISO-8859-X의 변이로 정의된다. 예를 들어, ISO-8859-1는 shift와 문자 변환이 허용되지 않은 채로 ISO-IR-1, ISO-IR-6, ISO-IR-77 과 ISO-IR-100의 조합으로 정의된다. 제어 문자를 사용하는 ISO/IEC 2022 문자 집합이 여전히 공용으로 사용되긴 하지만, 특히 ISO-2022-JP, 가장 현대적인 이메일 응용프로그램은 UTF-8같은 간단한 유니코드 변환을 사용하기 위해 변환된다. ISO-8859처럼 제어 시퀀스를 사용하지 않는 부호화는 여전히 일반적으로 사용된다.
# 코드 구조
{| class="wikitable" |- ! 코드 !! 축약 !! 이름 !! 효력 |- | `0x0F` || SI
LS0 || Shift In(SI)
Locking shift zero || GL → G0 (현재부터 인코딩) |- | `0x0E` || SO
LS1 || Shift Out(SO)
Locking shift one || GL → G1 (현재부터 인코딩) |- | `ESC 0x6E` (n) || LS2 || Locking shift two || GL → G2 (현재부터 인코딩) |- | `ESC 0x6F` (o) || LS3 || Locking shift three || GL → G3 (현재부터 인코딩) |- | `0x8E
ESC 0x4E` (N) || SS2 || Single shift two || GL → G2 (다음 문자에 한해 인코딩) |- | `0x8F
ESC 0x4F` (O) || SS3 || Single shift three || GL → G3 (다음 문자에 한해 인코딩) |- | `ESC 0x7E` (~) || LS1R || Locking shift one right || GR → G1 (현재부터 인코딩) |- | `ESC 0x7D` (}) || LS2R || Locking shift two right || GR → G2 (현재부터 인코딩) |- | `ESC 0x7C` (|) || LS3R || Locking shift three right || GR → G3 (현재부터 인코딩) |}
# 덧붙임
* ISO/IEC 2022는 Ecma 인터내셔널의 ECMA-35와 대응한다.