ISO/IEC 2022
1. 개요
ISO/IEC 2022는 다양한 언어의 문자를 단일 문자 인코딩 시스템에서 사용할 수 있도록 개발된 문자 인코딩 표준이다. 여러 부호화 문자 집합을 하나의 시스템으로 통합하기 위해 설계되었으며, 7비트 및 8비트 환경 모두에서 사용될 수 있다. ISO/IEC 646을 기반으로 하며, 이스케이프 시퀀스를 사용하여 문자 집합을 지정하고 호출하는 방식을 사용한다. ISO-2022-JP, EUC-JP, EUC-KR 등 다양한 인코딩 방식의 기반이 되었으며, 7비트 환경에서는 일본어 전자 메일에, 8비트 환경에서는 확장 유닉스 코드(EUC) 등에 활용되었다. 그러나 상태 기반 인코딩 방식의 한계로 인해 텍스트 조작의 어려움, 문자열 비교의 문제, 보안 취약성 등의 단점이 존재한다.
| 이름 | ISO 2022 |
|---|---|
| MIME | 해당 없음 |
| 다른 이름 | 해당 없음 |
| 표준 | ISO/IEC 2022 ECMA-35 ANSI X3.41 JIS X 0202 GB/T 2311 |
| 언어 | 다양함 |
| 확장 | 해당 없음 |
| 인코딩 | US-ASCII 및 구현체에 따라 다름: GB 2312 JIS X 0201 JIS X 0208 JIS X 0212 JIS X 0213 KS X 1001 CNS 11643 ISO/IEC 646 ISO/IEC 8859 / 10367 기타 |
| 상태 | 해당 없음 |
| 이전 | 해당 없음 |
| 다음 | ISO/IEC 10646 (유니코드) |
| 분류 | 스테이트풀 시스템의 인코딩 (스테이트리스 사전 구성 하위 집합 포함) |
| 관련 | 스테이트풀 하위 집합: ISO-2022-JP ISO-2022-CN ISO-2022-KR Compound Text 사전 구성 버전: ISO/IEC 4873 EUC |
-
IEC 표준 -
ISO/IEC 646
ISO/IEC 646는 ASCII 기반의 7비트 문자 인코딩 표준으로, 국가별 변형이 존재했으나, 최종 개정판은 ASCII와 호환되도록 정의되었고, 현재는 ITU-T 권고 T.50 IRA가 현행 표준으로 유지되고 있다. -
IEC 표준 -
POSIX
POSIX는 유닉스 기반의 이식 가능한 운영체제 인터페이스를 표준화하기 위한 IEEE 표준군으로, 프로세스 관리, 파일 시스템 접근, 스레드 처리 등 핵심 서비스들을 규정하며 운영체제 간 호환성을 높이는 데 기여한다. -
Ecma 표준 -
ISO/IEC 646
ISO/IEC 646는 ASCII 기반의 7비트 문자 인코딩 표준으로, 국가별 변형이 존재했으나, 최종 개정판은 ASCII와 호환되도록 정의되었고, 현재는 ITU-T 권고 T.50 IRA가 현행 표준으로 유지되고 있다. -
Ecma 표준 -
유니버설 미디어 디스크
유니버설 미디어 디스크(UMD)는 소니 PSP에 사용된 60mm 광 디스크로, 게임, 영상, 음악 콘텐츠를 최대 1.8GB까지 저장하며, DVD와 유사한 지역 코드와 AES 128 비트 암호화를 사용했지만, PSP 외 다른 기기에서 사용 불가 및 디지털 미디어의 발달로 인해 2010년대 초반에 지원이 중단되었다. -
문자 집합 -
점자
점자는 루이 브라이유가 개발한 시각 장애인용 촉각 문자 체계로, 6점 점자를 사용하여 133개 이상의 언어에 적용되었으며, 교육, 정보 접근, 사회 참여에 필수적인 역할을 수행하지만 문해력 저하와 교육의 어려움이라는 과제도 안고 있다. -
문자 집합 -
ISO/IEC 646
ISO/IEC 646는 ASCII 기반의 7비트 문자 인코딩 표준으로, 국가별 변형이 존재했으나, 최종 개정판은 ASCII와 호환되도록 정의되었고, 현재는 ITU-T 권고 T.50 IRA가 현행 표준으로 유지되고 있다.
2. 역사
컴퓨터를 이용해 문자 정보를 처리하기 시작하면서, 다양한 언어를 표현하기 위해 수많은 부호화 문자 집합이 만들어졌다. 그러나 이러한 문자 집합이 여러 개 존재하면서 정보 교환에 어려움이 발생했다. 특히, 서로 다른 문자 집합을 사용하는 경우 사전에 합의가 필요했고, 정보 교환 중에 여러 문자 집합을 사용하는 것도 쉽지 않았다.
ISO/IEC 2022는 이러한 문제를 해결하기 위해 개발되었다. 즉, 여러 문자 집합을 단일 문자 인코딩 시스템에서 사용할 수 있도록 하는 기술이다.
ASCII는 7비트 라틴 알파벳 문자 집합으로, 최대 94개의 그래픽 문자(공백 문자 제외)만을 표현할 수 있었다. ISO/IEC 646(1967년 초판)은 그래픽 문자 표현 영역을 ASCII와 동일하게 유지하면서, 12개의 부호 위치를 각 국가에서 자유롭게 사용할 수 있도록 허용하고, 국가별 문자 집합을 정의하는 방식을 채택했다.
ISO/IEC 2022 (1973년 초판)는 ISO/IEC 646에 기반한 여러 부호표를 전환하여 다양한 언어를 처리할 수 있도록 제정되었다. 그러나 ISO/IEC 646 방식으로는 라틴 알파벳 범위 내에서도 다양한 분음 부호가 붙은 문자나 언어별로 필요한 기호 등을 충분히 표현할 수 없었다.
이러한 문제를 해결하기 위해 ISO/IEC 646과 호환성을 유지하면서 8비트 부호화를 지원하는 ISO/IEC 4873 (1979년 초판)이 제정되었다. 특히 유럽에서는 1980년대에 들어 다국어 텍스트 데이터를 공통된 방식으로 처리하려는 요구가 높아졌고, 1987년부터 ISO/IEC 4873에 대응하는 ISO/IEC 8859 시리즈가 제정되기 시작했다. ISO/IEC 8859 시리즈는 96개의 그래픽 문자를 추가로 표현할 수 있게 했고, 언어별 문자 집합을 정의하는 방식을 채택했다.
그리스어, 러시아어, 아랍어, 히브리어와 같이 라틴 알파벳에 기반하지 않은 언어들은 역사적으로 ISO/IEC 4873에 준거한 "확장 ASCII"를 이용하여 컴퓨터에서 표현되었다. (일부는 후에 ISO/IEC 8859 시리즈에도 규정되었으며, 많은 국가 및 지역의 부호화 문자 집합 규격이 ISO/IEC 4873에 준거하고 있다).
동아시아 언어, 특히 중국어, 일본어, 한국어는 8비트의 1바이트로 표현 가능한 범위를 훨씬 넘어서는 수의 문자를 사용하며, 초기에는 언어별 2바이트 문자 집합으로 컴퓨터에서 표현되었다. ISO/IEC 2022는 이러한 다양한 문자 집합을 단일 부호화 방식에서 처리할 수 있도록 지원한다.
ISO/IEC 2022에 기반한 부호화 표현은 현재도 널리 사용되고 있다. 예를 들어 일본어 전자 메일용 ISO-2022-JP, UNIX 환경에서 사용되는 EUC-JP, 중국의 GB 2312인 EUC-CN, 한국의 EUC-KR 등이 있다. ISO/IEC 8859 시리즈도 ISO/IEC 2022의 구조를 따른다. 한편, 이 규격에 따르지 않는 부호화 방식 (예: Shift_JIS, 대만의 Big5)도 널리 사용되고 있다.
제2차 규격 이후의 주요 개정 사항은 다음과 같다.
* 제2차 규격
* 8비트 부호에 대응.
* 버퍼 G2 및 G3 신설.
* 멀티바이트 문자 집합에 대응.
* 제3차 규격
* 96문자 집합 및 96n 문자 집합에 대응.
* (JIS만 해당) JIS X 0201을 확장하는 규격에서 ISO/IEC 646을 확장하는 규격으로 변경되어 국제 일치 규격이 됨.
* 제4차 규격
* 7비트 부호 중심 기술에서 8비트 부호 중심 기술로 변경.
각 판별 규격 번호, 제정일 등은 아래 표와 같다.
| 판 | ISO 규격 번호 | ISO 제정·개정일 | JIS 번호 | JIS 제정·개정일 |
|---|---|---|---|---|
| 제1차 규격 | ISO 2022:1973 | 1973년 5월 제정 | JIS C 6228:1975 | 1975년 3월 1일 제정 |
| 제2차 규격 | ISO 2022:1982 | 1982년 12월 개정 | JIS C 6228:1984 | 1984년 11월 1일 개정 |
| 제3차 규격 | ISO 2022:1986 | 1986년 5월 개정 | JIS X 0202:1991 | 1991년 1월 1일 개정 |
| 제4차 규격 | ISO/IEC 2022:1994 | 1994년 12월 개정 | JIS X 0202:1998 | 1998년 1월 20일 개정 |
* 1987년 3월 1일 부문 X(정보 처리) 신설에 따라 JIS C 6228:1984는 JIS X 0202:1984로 개칭되었다.
3. 코드 구조
ISO/IEC 2022는 제어 문자 영역(C0, C1)과 그래픽 문자 영역(GL, GR)으로 구성된 부호표를 사용한다. 7비트 부호화에서는 C0 및 GL 영역을 사용하고, 8비트 부호화에서는 C0, C1, GL, GR 영역을 모두 사용한다.
--
7비트 부호는 32개의 제어 문자 기본 집합(C0)과 94개 또는 96개의 도형 문자 집합(GL)을 가지며, 8비트 부호는 추가로 32개의 제어 문자 보조 집합(C1)과 94개 또는 96개의 도형 문자 집합(GR)을 갖는다.
부호표상의 문자 위치는 행과 열로 나타낸다. 예를 들어 ASCII의 "Z"는 05/10에 해당하며, 16진수로는 5A이다.
복수 바이트 문자 집합에서는 여러 바이트로 하나의 문자를 부호화한다. 예를 들어 94n 문자 집합에서는 2바이트로 8836개(94x94), 3바이트로 830584개(94x94x94)의 문자를 표현할 수 있다. 2바이트 문자 집합에서 각 문자의 부호 위치는 구점(3바이트는 면구점)으로 지정된다. 예를 들어, JIS X 0208의 "字"는 27구 90점이므로, GL 영역에서는 03/11 07/10, GR 영역에서는 11/11 15/10으로 표현된다.
제어 기능과 문자 집합의 지정은 하위 섹션에서 자세히 다룬다.
3.1. 제어 기능
ISO/IEC 2022는 문자 집합의 지정 및 호출, 코드 구조 알림 등 다양한 제어 기능을 제공한다. 제어 기능은 7비트 환경에서는 이스케이프 시퀀스(ESC 문자로 시작)를 사용하고, 8비트 환경에서는 C1 제어 문자를 사용할 수 있다.
7비트 환경에서 C0 제어 문자 외에 ESCAPE 제어 문자(01/11, 16진수로 1B, 10진수로 27)로 시작하는 2~4바이트의 이스케이프 시퀀스를 사용한다. 8비트 환경에서는 C1 제어 문자도 사용한다.
ISO/IEC 2022의 제어 기능은 데이터의 올바른 해석을 위해 마지막으로 나타난 제어 기능에 의존하므로, 데이터를 처음부터 순서대로 처리해야 한다.
3.2. 문자 집합의 지정
ISO/IEC 2022는 여러 문자 집합을 표현하기 위해 이스케이프 시퀀스(escape sequence)를 사용하며, 이는 뒤에 오는 문자들의 문자 집합을 나타낸다. 이스케이프 시퀀스는 ISO에 등록되어 있으며, 표준에 의해 정의된 패턴을 따른다.
특정 문자 집합을 사용하려면 지정(designation)과 호출(invocation)이라는 두 단계를 거쳐야 한다.
* 지정: 이스케이프 시퀀스를 사용하여 사용할 문자 집합을 G0, G1, G2, G3 중 하나에 할당한다.
* 호출: 시프트(shift) 제어 기능을 사용하여 지정된 문자 집합을 GL 또는 GR 영역에 할당하여 실제로 사용할 수 있도록 한다.
ISO-IR(ISO International Register)은 ISO/IEC 2022와 함께 사용하도록 등록된 그래픽 문자 집합, 제어 코드 집합 등을 나열한다. 각 등록에는 고유한 이스케이프 시퀀스와 레지스트리 항목 번호가 할당된다.
문자 집합 지정을 위한 이스케이프 시퀀스는 다음 형식을 따른다.
* `ESC [...] `
* ``: 중간 바이트 (0x20–0x2F 범위)
* ``: 최종 바이트 (0x30–0x7E 범위)
첫 번째 `` 바이트(또는 멀티바이트 집합의 경우 처음 두 바이트)는 문자 집합의 유형과 해당 문자 집합이 지정될 작업 집합(G0-G3)을 식별한다. `` 바이트(및 추가 `` 바이트)는 ISO-IR 레지스터에 할당된 문자 집합 자체를 식별한다.
G0부터 G3까지의 네 가지 작업 집합 각각은 94자 집합 또는 94n자 멀티 바이트 집합일 수 있다. 또한 G1에서 G3까지는 96자 또는 96n자 집합일 수 있다.
96자 또는 96n자 집합에서 GL이 호출될 때는 바이트 0x20부터 0x7F까지, GR이 호출될 때는 0xA0부터 0xFF까지가 해당 집합에 할당되어 사용될 수 있다. 94자 또는 94n자 집합에서는 바이트 0x20과 0x7F가 사용되지 않는다.
이스케이프 시퀀스 `` 바이트 및 해당 바이트가 수행하는 지정 또는 기타 기능의 표는 아래와 같다.
| 코드 | 16진수 | 약어 | 이름 | 효과 | 예시 |
|---|---|---|---|---|---|
ESC ( | 1B 28 | GZD4 | G0-지정 94자 집합 | G0에 사용할 94자 집합을 선택한다. | ESC ( B (ASCII in G0) |
ESC ) | 1B 29 | G1D4 | G1-지정 94자 집합 | G1에 사용할 94자 집합을 선택한다. | ESC ) I (JIS X 0201 가나 in G1) |
ESC * | 1B 2A | G2D4 | G2-지정 94자 집합 | G2에 사용할 94자 집합을 선택한다. | ESC * v (ITU T.61 RHS in G2) |
ESC + | 1B 2B | G3D4 | G3-지정 94자 집합 | G3에 사용할 94자 집합을 선택한다. | ESC + D (NATS-SEFI-ADD in G3) |
ESC - | 1B 2D | G1D6 | G1-지정 96자 집합 | G1에 사용할 96자 집합을 선택한다. | ESC - A (ISO 8859-1 RHS in G1) |
ESC . | 1B 2E | G2D6 | G2-지정 96자 집합 | G2에 사용할 96자 집합을 선택한다. | ESC . B (ISO 8859-2 RHS in G2) |
ESC / | 1B 2F | G3D6 | G3-지정 96자 집합 | G3에 사용할 96자 집합을 선택한다. | ESC / b (ISO 8859-15 RHS in G3) |
| `ESC $ ( ` | `1B 24 28 ` | GZDM4 | G0-지정 멀티바이트 94자 집합 | G0에 사용할 94n 문자 집합을 선택한다. | ESC $ ( C (KS X 1001 in G0) |
ESC $ ) | 1B 24 29 | G1DM4 | G1-지정 멀티바이트 94자 집합 | G1에 사용할 94n 문자 집합을 선택한다. | ESC $ ) A (GB 2312 in G1) |
ESC $ * | 1B 24 2A | G2DM4 | G2-지정 멀티바이트 94자 집합 | G2에 사용할 94n 문자 집합을 선택한다. | ESC $ * B (JIS X 0208 in G2) |
ESC $ + | 1B 24 2B | G3DM4 | G3-지정 멀티바이트 94자 집합 | G3에 사용할 94n 문자 집합을 선택한다. | ESC $ + D (JIS X 0212 in G3) |
ESC $ - | 1B 24 2D | G1DM6 | G1-지정 멀티바이트 96자 집합 | G1에 사용할 96n 문자 집합을 선택한다. | ESC $ - 1 (개인 사용) |
ESC $ . | 1B 24 2E | G2DM6 | G2-지정 멀티바이트 96자 집합 | G2에 사용할 96n 문자 집합을 선택한다. | ESC $ . 2 (개인 사용) |
ESC $ / | 1B 24 2F | G3DM6 | G3-지정 멀티바이트 96자 집합 | G3에 사용할 96n 문자 집합을 선택한다. | ESC $ / 3 (개인 사용) |
4. 응용
ISO/IEC 2022는 Ecma 인터내셔널의 ECMA-35와 대응되며, 다양한 문자 인코딩 방식에서 활용된다.
ASCII 문자 집합은 ISO 기본 라틴 알파벳(영어 알파벳과 동일)을 지원하지만, 추가 문자가 필요한 언어에는 적합하지 않다. 그리스 문자, 키릴 문자, 아랍 문자, 히브리 문자 등은 8-비트 단일 바이트 확장 ASCII 인코딩을 사용하여 표현되었는데, 일부는 ISO 2022를 준수하지만(ISO 8859 시리즈) 코드 페이지 437과 같은 다른 인코딩은 그렇지 않다.
중국어, 일본어, 한국어 (CJK 문자)는 더블 바이트 문자 집합 또는 가변 폭 인코딩으로 표현되었으며, 일부는 ISO 2022를 준수한다(예: 중국어 간체 인코딩 GB 2312). ISO 2022의 제어 코드는 그래픽 문자의 바이트 수에 관계없이 항상 단일 바이트로 표현된다. CJK 인코딩 중 7비트 환경에서 문자 집합 간 전환에 ISO 2022 메커니즘을 사용하는 경우는 "ISO-2022-"로 시작하는 이름을 갖는다(예: ISO-2022-JP). EUC-JP와 같은 다른 CJK 인코딩도 ISO 2022 메커니즘을 사용한다.
유니코드는 ISO 2022에서 C0 및 C1 제어 코드 개념을 상속받았지만, 유니코드 제어 문자를 추가했다. UTF-8은 ISO 2022 구조에서 벗어나는 방식을 사용하지만, ISO 2022 이스케이프 시퀀스는 xterm과 같은 특정 터미널 에뮬레이터에서 지원된다.
ISO/IEC 2022는 대규모 문자 집합을 표현하기 위해 7비트 문자 표현이 94개의 그래픽 문자를 나타낼 수 있다는 ISO/IEC 646의 속성을 기반으로 한다. 2바이트를 사용하면 최대 8,836개의 문자를, 3바이트를 사용하면 최대 830,584개의 문자를 나타낼 수 있다.
ISO/IEC 2022는 다른 코딩 시스템으로 전환하고 돌아오기 위한 시퀀스도 정의한다. ISO/IEC 2022로 돌아가기 위한 시퀀스를 지원하는 등록에는 비디오텍스 형식, UTF-8, UTF-1 등이 있다.
ISO/IEC 10646(유니코드) 형식으로 전환하는 시퀀스도 있으며, UTF-8, UTF-16, UTF-32 등이 포함된다.
| 유니코드 형식 | 코드 | 16진수 | 사용 중단된 코드 | 사용 중단된 16진수 |
|---|---|---|---|---|
| UTF-1 | (UTF-1은 현재 ISO/IEC 10646에 없음) | ESC % B | 1B 25 42 | |
| UTF-8 | ESC % G, ESC % / I | 1B 25 47, 1B 25 2F 49 | ESC % / G, ESC % / H | 1B 25 2F 47, 1B 25 2F 48 |
| UTF-16 | ESC % / L | 1B 25 2F 4C | ESC % / @, ESC % / C, ESC % / E, ESC % / J, ESC % / K | 1B 25 2F 40, 1B 25 2F 43, 1B 25 2F 45, 1B 25 2F 4A, 1B 25 2F 4B |
| UTF-32 | ESC % / F | 1B 25 2F 46 | ESC % / A, ESC % / D | 1B 25 2F 41, 1B 25 2F 44 |
X 컨소시엄의 복합 텍스트 형식은 레이블별로 인코딩을 지정하기 위해 5개의 개인용 DOCS 시퀀스를 정의한다.
ISO 2022 코드 버전에는 7비트 버전(ISO-2022-CN, ISO-2022-CN-EXT, ISO-2022-JP, ISO-2022-JP-1, ISO-2022-JP-2, ISO-2022-KR)과 8비트 버전(확장 유닉스 코드)이 있다. ISO/IEC 8859 인코딩도 ISO 2022를 따른다.
ISO/IEC 2022는 여러 문자 집합을 단일 문자 인코딩으로 다루기 위한 기술로 개발되었다. ASCII는 7비트 라틴 알파벳 문자 집합으로 94개의 그래픽 문자만 수용 가능했다. ISO/IEC 646은 ASCII를 따르면서 국가별 문자 집합을 정의하는 방식을 취했다.
ISO/IEC 2022는 ISO/IEC 646에 준거한 여러 부호표를 전환하여 다언어 처리를 실현하고자 제정되었다. 유럽에서는 8비트 부호를 채용한 ISO/IEC 4873과 ISO/IEC 8859 시리즈가 제정되어 다언어 텍스트 데이터 처리를 가능하게 했다.
동아시아 언어는 8비트로 표현 가능한 범위를 넘어서는 문자를 사용하며, 언어별 2바이트 문자 집합으로 표현되었다. ISO/IEC 2022는 이러한 문자 집합들을 단일 부호화 방식으로 다룰 수 있게 한다.
ISO/IEC 2022 기반 부호화 표현은 일본어 전자 메일용 ISO-2022-JP, UNIX 환경에서 사용되는 EUC-JP, 중국의 GB 2312인 EUC-CN, 한국의 EUC-KR 등에서 널리 사용된다. ISO/IEC 8859 시리즈도 ISO/IEC 2022의 구조를 따른다.
4.1. 7비트 부호화 멀티바이트 문자 집합
ISO-2022-JP는 일본어 전자 메일 등에서 널리 사용되는 7비트 인코딩 방식이다. 1993년 IETF RFC 1468에 명시되었다. 이 인코딩은 8비트 전송을 필요로 하지 않는다는 장점이 있다. 마이크로소프트는 이를 코드 페이지 50220이라고 부른다. ISO-2022-JP는 ASCII로 시작하며 다음과 같은 이스케이프 시퀀스를 사용한다.
* `ESC ( B`는 ASCII로 전환 (문자당 1 바이트)
* `ESC ( J`는 JIS X 0201-1976 (ISO/IEC 646:JP) 로마 집합으로 전환 (문자당 1 바이트)
* `ESC $ @`는 JIS X 0208-1978로 전환 (문자당 2 바이트)
* `ESC $ B`는 JIS X 0208-1983로 전환 (문자당 2 바이트)
JIS X 0208-1990에 추가된 두 문자의 사용이 허용되지만, IRR 시퀀스를 포함하지 않고 JIS X 0208-1983과 동일한 이스케이프 시퀀스를 사용한다.
RFC는 일부 기존 시스템이 `ESC ( B`와 `ESC ( J`를 구분하지 않거나, `ESC $ @`와 `ESC $ B`를 구분하지 않았지만, 전자 메일과 같은 메시지를 단순히 중계하는 시스템에서는 이스케이프 시퀀스를 변경해서는 안 된다고 규정하고 있다.
ISO-2022-KR은 한국어 문자 인코딩을 위한 7비트 방식이다. 1993년에 발행된 RFC 1557에 정의되어 있다. 이는 ASCII와 한국의 2바이트 KS X 1001-1992를 인코딩한다. ISO-2022-JP-2와 달리, 줄의 시작 부분에 `ESC $ ) C`를 한 번 포함하여 KS X 1001을 G1으로 지정한 후, 시프트 아웃 및 시프트 인 문자를 사용하여 이를 전환한다. HTML5에서 사용되는 WHATWG 인코딩 표준은 사이트 간 스크립팅과 같은 코드 인젝션 공격에 대한 우려 때문에 ISO-2022-KR을 대체 문자(replacement character)로 매핑한다.
ISO-2022-CN과 ISO-2022-CN-EXT는 중국어 문자 인코딩을 위한 7비트 방식이다. 1996년에 발행된 RFC 1922에 정의되어 있다. 이들은 시프트 아웃 및 시프트 인 기능과 SS2 및 SS3의 7비트 이스케이프 코드 형태를 사용한다. 이들은 문자 집합 GB 2312 (중국어 간체용)와 CNS 11643 (중국어 번체용)를 지원한다.
기본 ISO-2022-CN 프로파일은 ASCII를 G0(시프트 인) 세트로 사용하며, GB 2312 및 CNS 11643의 처음 두 개 평면도 포함한다.
* `ESC $ ) A`는 GB 2312-1980로 전환 (문자당 2바이트) [G1으로 지정]
* `ESC $ ) G`는 CNS 11643-1992 평면 1로 전환 (문자당 2바이트) [G1으로 지정]
* `ESC $ * H`는 CNS 11643-1992 평면 2로 전환 (문자당 2바이트) [G2로 지정]
ISO-2022-CN-EXT 프로파일은 다음과 같은 추가 세트 및 평면을 허용한다.
* `ESC $ ) E`는 ISO-IR-165로 전환 (문자당 2바이트) [G1으로 지정]
* `ESC $ + I`는 CNS 11643-1992 평면 3으로 전환 (문자당 2바이트) [G3으로 지정]
* `ESC $ + J`는 CNS 11643-1992 평면 4로 전환 (문자당 2바이트) [G3으로 지정]
* `ESC $ + K`는 CNS 11643-1992 평면 5로 전환 (문자당 2바이트) [G3으로 지정]
* `ESC $ + L`는 CNS 11643-1992 평면 6으로 전환 (문자당 2바이트) [G3으로 지정]
* `ESC $ + M`는 CNS 11643-1992 평면 7로 전환 (문자당 2바이트) [G3으로 지정]
ISO-2022-CN-EXT 프로파일은 또한 추가 국표 표준 그래픽 세트가 허용됨을 나열하지만, ISO 2022 이스케이프 시퀀스가 등록되어 할당된 경우에 한정된다.
* G1의 GB 12345
* G2의 GB 7589 또는 GB 13131
* G3의 GB 7590 또는 GB 13132
`ESC` (1바이트 문자 세트의 경우) 또는 `ESC $` (멀티바이트 문자 세트의 경우) 뒤의 문자는 지정된 문자 세트와 작업 세트의 유형을 지정한다.
HTML5에서 사용되는 WHATWG 인코딩 표준은 ISO-2022-CN 및 ISO-2022-CN-EXT ( HZ-GB-2312 뿐만 아니라)를 "대체" 디코더에 매핑한다. 이는 모든 입력을 대체 문자 (�)에 매핑하여 크로스 사이트 스크립팅 및 관련 공격을 방지하기 위한 것이다.
2024년 4월, glibc에서 ISO-2022-CN-EXT 구현에 보안 결함이 발견되었으며, 이로 인해 Linux 시스템에서 해당 인코딩을 완전히 비활성화하라는 권고가 나왔다.
4.2. 8비트 부호화
확장 유닉스 코드(EUC)는 주로 일본어, 한국어, 중국어 간체에 사용되는 8비트 가변폭 문자 인코딩 시스템이다. ISO/IEC 2022를 기반으로 하며, ISO/IEC 2022 구조를 따르는 문자 집합만 EUC 형식을 가질 수 있다. 최대 4개의 코드화된 문자 집합(G0, G1, G2, G3)을 나타낼 수 있다. G0 집합은 GL을 통해 호출되고, G1 집합은 GR을 통해 호출되며, G2 및 G3 집합은 (존재하는 경우) 단일 시프트 SS2 및 SS3을 사용하여 호출되는데, 이는 CR 바이트(각각 0x8E 및 0x8F)로 사용되며 GR(GL이 아님)을 통해 호출된다. 잠금 시프트 코드는 사용되지 않는다.
G0 집합에 할당된 코드는 ASCII 또는 KS X 1003(KS-Roman) 또는 JIS X 0201의 하위 절반(JIS-Roman)과 같은 해당 국가의 국가 ISO/IEC 646 문자 집합이다. 따라서 0x5C(백슬래시)는 EUC-JP의 일부 버전에서는 엔 기호를 나타내는 데 사용되고, EUC-KR의 일부 버전에서는 원 기호를 나타내는 데 사용된다.
G1은 2바이트로 표현되는 94x94 코드화된 문자 집합에 사용된다. EUC-CN(GB 2312의 EUC 형식)과 EUC-KR이 이러한 2바이트 EUC 코드의 예이다. EUC-JP는 최대 3바이트(SS3 + 2바이트)로 표현되는 문자를 포함하는 반면, EUC-TW의 단일 문자는 최대 4바이트(SS2 + 3바이트)를 차지할 수 있다.
EUC 코드는 ISO/IEC 2022의 발표자 또는 지정 시퀀스를 사용하지 않는다. 그러나 이는 다음과 같이 네 가지 발표자 시퀀스에 해당하며, 의미는 다음과 같다.
| 개별 시퀀스 | 16진수 | EUC의 기능 표기 |
|---|---|---|
| `ESC SP C` | `1B 20 43` | ISO-8 (8비트, G0는 GL에, G1은 GR에) |
| `ESC SP Z` | `1B 20 5A` | SS2를 사용하여 G2 접근 |
| `ESC SP [` | `1B 20 5B` | SS3을 사용하여 G3 접근 |
| `ESC SP \` | `1B 20 5C` | 단일 시프트는 GR을 통해 호출 |
8비트 단일 바이트 인코딩에 적용된 ISO 2022의 하위 집합은 ISO/IEC 4873에 의해 정의되며, Ecma International에 의해 ECMA-43으로도 출판되었다. ISO/IEC 8859는 ISO/IEC 4873(또는 ECMA-43) 레벨 1에 대한 8비트 코드를 정의한다.
4.3. 기타
확장 ASCII는 8비트 부호를 사용하는 싱글바이트 문자 집합으로, ASCII에 대해 상위 호환되는 것을 가리킨다. ISO/IEC 4873에 준거한 부호표를 가지면 그 문자 집합은 ISO/IEC 2022에 준거한다고 말할 수 있다. 확장 ASCII는 일반적으로 다음과 같은 특징을 가진다.
* 공지 기능의 이스케이프 시퀀스는 생략한다.
* G0에 ISO/IEC 646의 각국 버전 또는 ASCII를, G1에 기타 싱글 바이트 문자 집합을 지시하고, G0을 GL 영역에, G1을 GR 영역에 호출한 상태로 시작한다 (이를 위한 제어 기능은 생략한다).
* 지시 상태도 호출 상태도 고정적으로 정해져 있으며, 변경은 하지 않는다.
이러한 방식을 통해 8비트 부호로 최대 188개 내지 190개의 그림 문자를 이용할 수 있으며, 모든 문자가 1바이트의 고정 길이로 표현된다.
확장 ASCII의 예는 다음과 같다.
* ARMSCII (아르메니아 문자)
* ASMO 449+ (아랍 문자)
* ISCII (인도 문자)
* ISO/IEC 8859 시리즈 (유럽 언어, 아랍 문자, 그리스 문자, 키릴 문자, 타이 문자, 히브리 문자)
* JIS X 0201 (일본어 가타카나)
* PASCII (아랍 문자)
* TIS 620 (타이 문자)
* TSCII (타밀 문자)
VISCII와 KOI8 계열 문자 집합 (키릴 문자)처럼 도형 문자를 GR 영역이나 GL 영역 밖으로까지 배치하는 경우도 있다.
Compound Text Encoding(CTEXT)는 X Window System에서 클라이언트 간의 텍스트 정보 전달 및 자원 내 텍스트 정보 표현에 사용되는 부호화 방식이다. CTEXT는 다음과 같은 특징을 갖는다.
* 아나운스 기능의 이스케이프 시퀀스는 생략한다.
* 8비트 부호이므로 GR 영역도 사용한다.
* G0에 ASCII를, G1에 ISO/IEC 8859-1의 오른쪽 절반을 지정하고, G0을 GL 영역에, G1을 GR 영역에 호출한 상태로 시작한다(이러한 제어 기능은 생략한다). 즉, 처음에는 ISO/IEC 8859-1로 시작한다.
* G0 및 G1에 대한 지정이 GL 영역 및 GR 영역에 대한 호출을 겸한다. 호출 제어 기능은 사용하지 않는다. 즉, 문자 집합 선택은 지정의 이스케이프 시퀀스만으로 수행한다.
* ISO/IEC 2022의 DOCS와 사적 종료 바이트에 의해, 사용자 고유의 문자 집합 및 UTF-8처럼 ISO/IEC 2022에 준거한 구조의 부호표를 갖지 않는 부호화 시스템을 지정한다.
* ISO/IEC 6429의 SDS에 의해 문자 쓰기 방향을 지정한다.
CTEXT는 여러 부호화 시스템 및 문자 집합이 혼재하는 경우에도 문자 코드 변환에 의한 정보 열화를 일으키지 않으며, 클라이언트가 지원하지 않는 부호화 시스템 및 문자 집합의 정보도 전달할 수 있게 되었다.
5. 한계
ISO/IEC 2022는 상태 기반 인코딩 방식을 사용하므로, 다음과 같은 몇 가지 한계점이 존재한다.
* 텍스트 처리의 어려움: 텍스트 블록 중간에서 검색, 삽입, 삭제 등의 작업을 하기가 어렵다. 상태 비저장(stateless) 인코딩에 비해 텍스트 조작이 번거롭고 느리다. 텍스트 중간 부분으로 이동하면, 이스케이프 시퀀스 뒤의 바이트를 해석하기 전에 이전 이스케이프 시퀀스를 찾아야 할 수도 있다.
* 문자열 비교의 어려움: ISO/IEC 2022는 상태 기반 특성 때문에, 동일한 문자가 G0부터 G3까지 지정될 수 있는 다양한 문자 집합으로 인코딩될 수 있다. 이는 단일 시프트 또는 GL/GR로의 잠금 시프트를 사용하여 호출될 수 있다. 결과적으로 문자는 여러 방식으로 표현될 수 있으며, 이는 시각적으로 동일하고 동등한 두 문자열을 동일성 여부를 신뢰성 있게 비교할 수 없음을 의미한다.
* 텍스트 이식성 문제: DICOM이나 여러 전자 메일 클라이언트와 같은 일부 시스템은 여러 다른 인코딩을 지원하는 것 외에도 "ISO 2022 IR 100"과 같은 ISO-2022 변형을 사용한다. 이러한 변형은 컴퓨터 시스템 간에 텍스트를 이식 가능하게 전송하는 것을 어렵게 만든다.
* 보안 취약점: 이스케이프 시퀀스 때문에, 유해한 문자열(예: 크로스 사이트 스크립팅)이 유니코드로 디코딩될 때까지 가려져서 보안 처리를 우회할 수 있는 공격 바이트 시퀀스를 구성할 수 있다. 따라서 이 인코딩의 사용은 멀웨어 방지 프로그램에서 의심스러운 것으로 간주되며, ISO 2022 7비트 데이터(ISO-2022-JP 제외)는 공격을 방지하기 위해 HTML5에서 전체적으로 대체 문자로 변환된다. 지정 이스케이프 또는 잠금 시프트 코드를 사용하지 않는 확장 유닉스 코드와 같은 제한된 ISO 2022 8비트 코드 버전은 이러한 문제를 겪지 않는다.
* 연결 문제: ISO-2022-JP와 같은 프로필은 스트림이 ASCII 상태로 시작하고 끝나야 한다고 명시한다. 이는 연결된 ISO-2022-JP 및/또는 ASCII 스트림의 문자가 올바른 집합으로 해석되도록 하는 데 필요하다. 이는 멀티 바이트 문자로 끝나는 스트림이 멀티 바이트 문자로 시작하는 스트림과 연결될 경우 ASCII로 전환하고 즉시 전환하는 한 쌍의 이스케이프 코드가 생성되는 결과를 초래한다. 그러나 유니코드 기술 보고서 #36("유니코드 보안 고려 사항")에 명시된 바와 같이, 사이에 문자가 없는 ISO 2022 이스케이프 시퀀스 쌍은 크로스 사이트 스크립팅과 같은 악성 시퀀스를 숨기는 데 사용되지 않도록 대체 문자("�")를 생성해야 한다. 예를 들어 모질라 선더버드에서 이 조치를 구현하면 두 개의 ISO-2022-JP 스트림이 연결된 경우 예상치 못한 "�" 문자가 생성되어 상호 운용성 문제가 발생했다.