C0 및 C1 제어 코드는 문자 인코딩 표준(ISO/IEC 6429, ECMA-48, ASCII, ISO 8859, 유니코드 등)에서 문자가 아닌 제어 기능을 위해 예약된 코드 포인트 집합을 분류한 것이다. 이 코드들은 텍스트의 표시, 전송, 장치 제어 등에 사용되는 비가시적 명령어를 정의한다.
C0 제어 코드 (C0 Controls)
- 범위: 0x00 ~ 0x1F (0~31번) 및 0x7F (127번, DEL)
- 기원: 7비트 ASCII(ISO 646) 표준에서 유래하였다.
- 주요 기능: 전송 제어(STX, ETX, ACK, NAK 등), 포맷 제어(LF, CR, HT, FF 등), 장치 제어(BEL, DC1~DC4 등), 정보 구분자(FS, GS, RS, US) 등을 포함한다.
- 현황: 유니코드(U+0000~U+001F, U+007F) 및 대부분의 현대 문자 인코딩(UTF-8, ISO-8859 계열, 윈도우 코드 페이지 등)에서 동일하게 유지되어 호환성을 보장한다.
C1 제어 코드 (C1 Controls)
- 범위: 0x80 ~ 0x9F (128~159번)
- 기원: 8비트 확장 환경(ISO/IEC 4873, ISO/IEC 8859 시리즈)에서 7비트 환경의 ESC 시퀀스(ESC 0x40~0x5F)를 단일 바이트로 표현하기 위해 도입되었다.
- 주요 기능: 터미널 제어(NEL, HTS, VTS 등), 문자열 구분(DCS, SOS, ST, OSC, PM, APC), 보호 영역 제어(SPA, EPA), 인덱스 이동(IND, RI) 등 고급 표시 및 장치 제어 기능을 제공한다.
- 7비트 표현: 7비트 환경에서는
ESC(0x1B) 뒤에@(0x40)부터_(0x5F)까지의 문자를 조합하여 표현한다(예: CSI =ESC [). - 현황: 유니코드(U+0080~U+009F)에서는 해당 코드 포인트에 C1 제어 문자를 할당한다. 그러나 윈도우 코드 페이지(CP1252) 등 일부 레거시 인코딩에서는 이 영역(0x80~0x9F)을 인쇄 가능한 그래픽 문자(유로 기호, 스마트 따옴표 등)로 할당하여 사용하기도 한다. 이로 인해 인코딩 간 변환 시 데이터 손실이나 오표시가 발생할 수 있다.
관련 표준
- ISO/IEC 6429 (ECMA-48): 제어 기능 정의
- ISO/IEC 2022 (ECMA-35): 코드 구조 및 확장 기법
- 유니코드 표준 (Unicode Standard): U+0000~U+001F, U+007F, U+0080~U+009F 할당