C0 및 C1 제어 코드

**C0 및 C1 제어 코드** 세트는 ASCII 및 ASCII 파생형을 사용하는 컴퓨터 시스템에서 텍스트에 사용하기 위한 제어 문자 세트를 정의한다. 이 코드들은 커서의 위치, 새 줄 시작 명령, 또는 텍스트 수신 완료 메시지와 같은 텍스트에 대한 추가 정보를 나타낸다.

C0 코드는 00HEX–1FHEX 범위에 해당하며, 기본 C0 세트는 원래 ISO 646 (ASCII)에서 정의되었다. C1 코드는 80HEX–9FHEX 범위에 해당하며, 기본 C1 세트는 원래 ECMA-48 (나중에 ISO 6429와 일치됨)에서 정의되었다. 제어 및 그래픽 문자를 지정하는 ISO/IEC 2022 시스템을 통해 특수 용도로 다른 C0 및 C1 세트를 사용할 수 있지만, 실제로 사용되는 경우는 드물다.

## C0 제어 문자
ASCII는 32개의 제어 문자와 DEL 문자를 정의한다. 당시에는 다중 바이트 제어가 터미널에 상태 머신 구현을 요구했기 때문에, 당시의 전자 공학 및 기계식 터미널로는 구현하기가 매우 어려워 이처럼 많은 수의 단일 바이트 코드가 선호되었다.

오늘날까지 사용되는 코드는 BEL, ESC, 그리고 형식 효과 장치(format effector) (FEn) 문자인 BS, HT, LF, VT, FF, CR 정도에 불과하다. 다른 코드들은 사용되지 않거나, NUL이 C 문자열 종단자로 쓰이는 것처럼 다른 의미를 갖게 되었다. ANPA-1312, 커밋, XMODEM과 같은 일부 데이터 전송 프로토콜은 SOH, STX, ETX, EOT, ACK, NAK, SYN을 원래 정의와 유사한 용도로 광범위하게 사용하며, 유닉스 info 형식이나 파이썬의  문자열 메서드 등 일부 파일 형식에서는 "정보 분리 문자"(Information Separators, ISn)를 사용한다.

ISO 6429:1992 (또는 ECMA-48:1991)에서는 쓰기 방향에 중립적이 되도록 일부 코드의 명칭이 변경되었다. 표준을 다른 언어로 번역할 때 약어는 변경하지 않는다고 이미 규정되어 있었기 때문에 사용되는 약어는 바뀌지 않았다. 아래 표에는 명칭이 변경된 제어 문자에 대해 새 명칭과 옛 명칭(약어와 일치하는 명칭)을 모두 표시했다.

유니코드는 C0 제어 문자를 화면에 표시할 수 있도록 대체하는 제어 문자 기호 영역을 제공한다. 그러나 캐럿 표기법이 더 자주 사용된다.

## C1 제어 문자

1973년에 ECMA-35 및 ISO 2022는 8비트 "확장 ASCII" 코드를 해당하는 7비트 코드로 변환하거나 그 반대로 변환하는 방법을 정의하려고 시도했다. 7비트 환경에서 시프트 아웃()은 에서 까지의 96바이트 (즉, C0 제어 코드를 제외한 모든 문자)의 의미를, 8비트 환경에서 상위 비트가 설정된 상태로 동일한 코드를 사용할 때 출력되는 문자로 변경하도록 했다. 이는 에서  범위가 7비트 환경에서는 출력될 수 없음을 의미했으므로, 어떠한 대체 문자 세트도 이 범위를 사용할 수 없도록 결정되었고, 이 코드들은 추가 제어 코드가 되었으며 이는 **C1 제어 코드**로 알려지게 되었다. 7비트 환경에서 이 새로운 제어 문자를 사용할 수 있도록 `ESC @`부터 `ESC _`까지의 시퀀스를 동등한 것으로 간주했다. 나중에 ISO/IEC 8859 표준은 7비트 코드 지원을 중단했지만 이 제어 문자 범위는 유지했다.

ISO 2022에 사용하기 위해 등록된 최초의 C1 제어 코드 세트는 1979년에 서지용 특수 세트로 등록된 DIN 31626이다.

더 흔한 일반 용도의 ISO/IEC 6429 세트는 1983년에 등록되었으나, 그 기반이 된 ECMA-48 사양은 1976년에 처음 발표되었으며 JIS X 0211 (이전의 JIS C 6323)도 있었다.  및 ISO 10646 초기 초안에서 정의되었으나 ISO/IEC 6429에는 없는 기호 명칭(, , )도 사용된다.

EUC-JP 텍스트의  및 , 그리고 EBCDIC에서 변환된 텍스트의 을 제외하고, 이 코드들의 8비트 형태는 거의 사용되지 않았다. , , 는 터미널 제어에 사용되지만, 거의 항상 7비트 이스케이프 코드 표현으로 사용된다. 오늘날 이 코드들을 마주친다면, 해당 위치를 인쇄 문자로 사용하는 Windows-1252나 Mac OS Roman으로 의도된 것일 가능성이 훨씬 높다.

을 제외하고, 유니코드는 이들에 대해 "제어 문자 기호"를 제공하지 않는다. 캐럿 표기법의 잘 알려진 변형도 존재하지 않는다.

## 기타 제어 코드 세트

ISO/IEC 2022 (ECMA-35) 확장 메커니즘을 통해 이스케이프 시퀀스로 C0 및 C1 세트를 변경할 수 있다. 위에 표시된 표준 C0 제어 문자 세트는 시퀀스 로 선택되며, 위의 C1 세트는 시퀀스 로 선택된다.

여러 공식 및 비공식 대안이 정의되었으나 현재는 거의 폐기되었다. 대부분은 상호운용성을 위해 ASCII 제어 문자와 상당한 호환성을 유지해야 했다. 표준은 ESC, SP, DEL을 "고정" 코딩된 문자로 규정하며, 이는 표준을 준수하는 모든 인코딩의 ASCII 위치에서 사용할 수 있다. 또한 C0 세트에 전송 제어(TCn) 코드가 포함된 경우 ASCII 위치에 인코딩되어야 하며 C1 세트에 넣을 수 없음을 명시하고 있으며, 모든 새로운 전송 제어는 C1 세트에 있어야 한다.

### 대체 C0 문자 세트
* 뉴스 전송에 사용되는 텍스트 마크업 언어인 ANPA-1312는 여러 C0 제어 문자를 대체한다.
* 위의 최신 국제 버전인 IPTC 7901은 자체적인 변형을 가지고 있다.
* 비디오텍스는 완전히 다른 세트를 가지고 있다.
* 문자 다중 방송 또한 비디오텍스와 유사한 세트를 정의한다.
* T.61/T.51 등은 EM과 GS를 SS2와 SS3로 대체하여, 이 기능들을 이스케이프 시퀀스를 사용하지 않고도 7비트 환경에서 사용할 수 있도록 했다.
* 일부 세트는 FS를 SS2로 대체했다. (ANPA-1312와 동일).
* 현재 철회된 JIS C 6225 (나중에 JIS X 0207로 지정)는 FS를 세로 쓰기 동작, 위 첨자 및 아래 첨자, 그리고 사용자 정의 문자 그래픽 전송을 위한 제어 시퀀스를 도입하는 CEX 또는 "제어 확장"(Control Extension)으로 대체했다.

### 대체 C1 문자 세트
* MARC-8과 같이 문자열 데이터 정렬을 포함한 서지 용도로 등록된 전문 C1 제어 코드 세트가 있다.
* 비디오텍스 형식을 위해 등록된 다양한 전문 C1 제어 코드 세트가 있다.
* 스트라투스 VOS 운영 체제는 NLS 제어 세트라고 불리는 C1 세트를 사용한다. 여기에는 미리 정의된 보조 문자 세트에서 개별 문자를 호출하는 데 사용되는 SS1(Single-Shift 1)에서 SS15(Single-Shift 15) 제어 문자가 포함되어 있으며, 이는 ISO/IEC 2022의 싱글 시프트 메커니즘과 유사하다. ISO/IEC 2022에서 정의된 싱글 시프트 제어 문자는 SS2와 SS3뿐이며, VOS 세트에서도 이들은 원래 코드 포인트에 유지되어 동일하게 작동한다.
* EBCDIC은 ASCII에 있는 것 외에도 최대 29개의 추가 제어 코드를 정의한다. EBCDIC을 유니코드(또는 ISO 8859)로 번역할 때, 이 코드들은 IBM의 문자 데이터 표현 아키텍처(CDRA)에서 지정한 방식에 따라 C1 제어 문자로 매핑된다. 새줄 문자(NL)는 ISO/IEC 6429 로 번역되지만(유닉스 줄 바꿈 관례에 따라 LF와 맞바뀌는 경우가 많음), 나머지 제어 코드들은 서로 대응되지 않는다. 예를 들어, EBCDIC 제어 문자 와 ECMA-48 제어 문자 는 모두 위 첨자를 시작하거나 아래 첨자를 끝내는 데 사용되지만 서로 매핑되지는 않는다. 따라서 확장 ASCII로 매핑된 EBCDIC은 ISO/IEC 2022용 ISO-IR 레지스트리에 등록되지는 않았으나 자체적인 C1 세트를 갖는 것으로 간주될 수 있다.

## 유니코드

유니코드는 C0 및 C1 제어 코드와의 호환성을 위해 위에서 설명한 65개의 코드 포인트를 예약하고, 이들에게 일반 범주  (제어)를 부여한다. 이들은 다음과 같다.
* C0 제어 문자 및 로마자 기본 블록에 할당된  (C0 제어 문자) 및  (DEL).
* C1 제어 문자 및 라틴-1 보충 블록에 할당된  (C1 제어 문자).
유니코드는 C0 형식 제어 문자인 HT, LF, VT, FF, CR(BS는 누락됨), C0 정보 분리 문자인 FS, GS, RS, US(및 SP), 그리고 C1 제어 문자 NEL에 대해서만 의미를 지정한다. 나머지 코드들은 유니코드에서 투명하게 처리되며 그 의미는 상위 수준 프로토콜에 맡겨지는데, ISO/IEC 6429가 기본값으로 권장된다.

유니코드에는 이 외에도 명시적인 양방향 형식을 위한 표식, 임베딩, 격리, 팝, 합자 사용을 제어하기 위한 폭 없는 접합자 및 폭 없는 비접합자와 같은 많은 추가 형식 효과 문자가 포함되어 있다. 그러나 이들은 가 아닌  (형식) 일반 범주가 부여된다.

## 같이 보기
* 제어 문자 기호 - C0 제어 문자에 대한 유니코드 그래픽 표현 문자
* ANSI 이스케이프 코드

## 내용주

## 각주

## 외부 링크
* 유니코드 표준
** C0 Controls and Basic Latin
** C1 Controls and Latin-1 Supplement
** Control Pictures
** The Unicode Standard, Version 6.1.0, Chapter 16: Special Areas and Format Characters
* ATIS Telecom Glossary 2007
* De litteris regentibus C1 quaestiones septem or Are C1 characters legal in XHTML 1.0?
* W3C I18N FAQ: HTML, XHTML, XML and Control Codes
* International register of coded character sets to be used with escape sequences 

분류:제어 문자