맨위로가기

제어 문자

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

제어 문자는 초기 통신 및 컴퓨터 시스템에서 사용된 특수 문자이며, 다양한 기능을 수행하기 위해 설계되었다. 모스 부호에서 시작되어, 1870년 보도 코드에서 처음 도입되었으며, 이후 ASCII를 비롯한 다양한 문자 인코딩 시스템에 포함되었다. 이러한 문자는 인쇄 제어, 데이터 구조화, 전송 제어 등 다양한 목적으로 사용되었으며, 키보드 입력, 프로그래밍 언어, 운영 체제 등 현대 컴퓨팅 환경에서도 여전히 중요한 역할을 한다. 유니코드에서도 제어 문자를 지원하며, 이스케이프 시퀀스와 같은 다양한 표현 방법으로 나타낼 수 있다.

더 읽어볼만한 페이지

  • 제어 문자 - 공백 문자
    공백 문자는 단어를 구분하고 텍스트의 구조를 나타내기 위해 사용되며, 언어와 컴퓨터 환경에 따라 다양한 형태로 존재하고 활용된다.
  • 제어 문자 - 이스케이프 시퀀스
    이스케이프 시퀀스는 컴퓨터 주변 장치의 상태를 변경하는 문자열로, 초기 보도 코드에서 시작하여 ASCII 표준을 거쳐 발전했으며 터미널, 프린터, 모뎀 제어 등에 사용되고, C 언어에서는 백슬래시를 사용하여 특수 문자를 표현한다.
제어 문자
개요
종류제어 문자
다른 이름비인쇄 문자
그래픽 문자
상세 정보
정의문자 집합에서 쓰여진 기호를 나타내지 않는 코드 포인트
역할장치 제어 또는 메타 정보 제공
예시BEL
BS
CR
ESC
LF
역사
기원텔레프린터
펀치 카드
용도대역 내 신호 방식
기계 장치 제어
표준
ASCII33개의 제어 문자 (코드 0-31, 127)
C0 제어 코드아스키 제어 문자 기반
C1 제어 코드ISO/IEC 6429 (ECMA-48)에 정의
추가 정보
문제점일부 제어 문자 의미 모호성
유니코드에서 "폐지된 제어 문자"로 분류된 문자 존재

2. 역사

모스 부호의 절차 신호는 제어 문자의 한 형태이다. 1870년 보도 코드(Baudot code)에서 NUL과 DEL 형태의 제어 문자가 처음 도입되었다. 1901년 머레이 코드(Murray code)는 캐리지 리턴(CR)과 라인 피드(LF)를 추가했으며, 보도 코드의 다른 버전에는 다른 제어 문자들도 포함되었다. 운영자에게 알리기 위해 벨을 울리는 벨 문자(BEL) 또한 초기 텔레타이프 제어 문자였다.

2. 1. 모스 부호와 보도 코드

모스 부호의 절차 신호는 제어 문자의 한 형태이다.

1870년 보도 코드(Baudot code)에서 NUL과 DEL 형태의 제어 문자가 처음 도입되었다. 1901년 머레이 코드(Murray code)는 캐리지 리턴(CR)과 라인 피드(LF)를 추가했으며, 보도 코드의 다른 버전에는 다른 제어 문자들도 포함되었다.

운영자에게 알리기 위해 벨을 울리는 벨 문자(BEL) 또한 초기 텔레타이프 제어 문자였다.

2. 2. ASCII의 등장과 확장

ASCII에는 33개의 제어 문자가 정의되어 있었고, ECMA-48 표준은 32개를 더 추가했다. 초기 터미널은 매우 원시적인 기계적 또는 전기적 제어 장치를 가지고 있어서 각 기능마다 다른 코드가 필요했기 때문이다. 그러나 기능을 수행하기 위해 코드 시퀀스를 해석하는 것이 가능해지면서, 장치 제조업체는 ASCII 코드 2710(이스케이프)를 사용하고 그 뒤에 "제어 시퀀스" 또는 "이스케이프 시퀀스"라고 하는 일련의 문자를 사용하는 방식을 개발했다. 이 메커니즘은 ASCII의 아버지인 밥 베머가 발명했다. 예를 들어, 코드 2710 뒤에 "[2;10H"가 오면 Digital Equipment Corporation(DEC) VT100 터미널의 커서를 화면의 두 번째 줄의 10번째 셀로 이동시킨다. 이러한 시퀀스에는 ANSI X3.64를 포함한 여러 표준이 존재하지만, 비표준 변형도 많다.

초기 32개의 제어 문자, 공백 및 삭제 문자에 할당된 기호. (ISO 2047, MIL-STD-188-100, 1972)


아래 ASCII 표의 3210 코드 미만 항목(기술적으로 C0 제어 코드 세트)과 코드 12710(DEL)은 제어 문자이다.[1][2] 확장 ASCII 세트는 ISO 8859에 의해 정의되었으며 코드 12810부터 15910까지를 제어 문자로 추가했다. 이는 상위 비트를 제거할 경우 인쇄 문자가 C0 제어 코드로 변경되지 않도록 하기 위해서였다. 이 두 번째 세트를 C1 세트라고 한다.

이러한 65개의 제어 코드는 유니코드로 이전되었다. 유니코드는 제어 코드로 간주될 수 있는 더 많은 문자를 추가했지만, "서식 문자"(예: 너비가 0인 문자 결합 안 함)와 65개의 제어 문자를 구별한다.

확장 2진화 10진 코드 교환 코드(EBCDIC) 문자 세트는 모든 ASCII 제어 코드와 IBM 주변 장치를 제어하는 데 주로 사용되는 추가 코드를 포함하여 65개의 제어 코드를 포함한다.

ASCII 제어 코드.[3]
0x000x10
0x00NULDLE
0x01SOHDC1
0x02STXDC2
0x03ETXDC3
0x04EOTDC4
0x05ENQNAK
0x06ACKSYN
0x07BELETB
0x08BSCAN
0x09HTEM
0x0ALFSUB
0x0BVTESC
0x0CFFFS
0x0DCRGS
0x0ESORS
0x0FSIUS
0x7FDEL



ASCII 제어 문자 중 여전히 일반적으로 사용되는 문자는 다음과 같다.


  • 0x00 (): 원래 무시되는 문자였지만, 현재 C를 포함한 많은 프로그래밍 언어에서 문자열의 끝을 표시하는 데 사용된다.
  • 0x07 (벨): 장치에서 벨이나 삐 소리 또는 화면 깜박임과 같은 경고를 발생시킬 수 있다.
  • 0x08 (백스페이스): 이전 문자를 덮어쓸 수 있다.
  • 0x09 (수평 탭): 인쇄 위치를 다음 탭 정지점으로 오른쪽으로 이동시킨다.
  • 0x0A (줄 바꿈): 인쇄 헤드를 한 줄 아래로 이동하거나 왼쪽 가장자리로 이동한다. 대부분의 유닉스 시스템 및 변형에서 줄 끝 표시자로 사용된다.
  • 0x0B (수직 탭): 수직 탭.
  • 0x0C (양식 피드): 프린터가 다음 페이지의 맨 위로 용지를 배출하거나 비디오 터미널이 화면을 지우도록 한다.
  • 0x0D (캐리지 리턴): 인쇄 위치를 줄의 시작 부분으로 이동하여 덮어쓰기가 가능하도록 한다. 클래식 Mac OS, OS-9, FLEX (및 변형)에서 줄 끝 표시자로 사용된다. CP/M-80 및 DOS 및 Windows를 포함한 파생물, FTP, SMTP 및 HTTP와 같은 응용 계층 통신 프로토콜에서 CR+LF 쌍으로 사용된다.
  • 0x1A (Control-Z): Windows 텍스트 모드 파일 i/o의 파일 끝으로 작동한다.
  • 0x1B (이스케이프): 이스케이프 시퀀스를 소개한다.


사용자가 입력할 때 제어 문자는 무언가를 수행하는 것으로 설명될 수 있다. 예를 들어, 코드 3(텍스트 종료 문자)은 실행 중인 프로세스를 중단하고, 코드 4(전송 종료 문자)는 유닉스에서 텍스트 입력을 종료하거나 유닉스 셸을 종료하는 데 사용된다.

모스 부호의 교신 약호는 제어 문자의 한 형태라고 할 수 있다.

1870년에 제정된 보도 부호에서 최초의 제어 문자 NUL와 DEL이 도입되었다. 1901년에 도널드 머레이가 캐리지 리턴 (CR)과 라인 피드 (LF)를 추가할 것을 제안하는 등, 보도 부호에는 다양한 제어 문자가 추가되었다. 벨 문자는 송신 상대의 벨을 울려 오퍼레이터에게 알리기 위한 문자로, 초기 텔레타이프 단말기에서 추가되었다.

3. ASCII 제어 문자



ASCII 제어 문자는 초기에 터미널이 상태를 기억하는 API를 구현하는 데 많은 비용이 들게 하는 원시적인 기계적, 전기적 제어 장치를 가졌기 때문에, 모든 기능에 대해 각기 다른 코드가 필요했기 때문에 꽤 많은 수가 정의되었다(ASCII에서는 33개).[1][2] 기능 수행을 위해 코드 시퀀스를 해석하는 것이 가능해지고 저렴해지면서, 장치 제조업체는 밥 베머가 발명한 이스케이프 시퀀스를 사용하여 수백 개의 장치 명령을 전송하는 방법을 찾았다. 예를 들어, 코드 2710(이스케이프 문자) 뒤에 "[2;10H"가 오면 Digital Equipment Corporation(DEC) VT100 터미널의 커서를 화면의 두 번째 줄의 10번째 셀로 이동시킨다.

ASCII 표의 3210 코드 미만(기술적으로 C0 제어 코드)과 12710(DEL) 코드가 제어 문자이다. 확장 ASCII 세트는 ISO 8859에 의해 정의되었으며 코드 12810부터 15910까지를 제어 문자로 추가했다. 이를 C1 세트라고 한다.

ASCII 제어 코드.[3]
0x000x10
0x00NULDLE
0x01SOHDC1
0x02STXDC2
0x03ETXDC3
0x04EOTDC4
0x05ENQNAK
0x06ACKSYN
0x07BELETB
0x08BSCAN
0x09HTEM
0x0ALFSUB
0x0BVTESC
0x0CFFFS
0x0DCRGS
0x0ESORS
0x0FSIUS
0x7FDEL



이러한 제어 문자들은 유니코드로 이전되었으며, 유니코드는 제어 코드로 간주될 수 있는 더 많은 문자를 추가했지만, "서식 문자"와 65개의 제어 문자를 구별한다.

사용자가 제어 문자를 입력하는 것은 특정한 동작을 유발한다. 예를 들어 코드 3(텍스트 종료 문자)은 실행 중인 프로세스를 중단시키고, 코드 4(전송 종료 문자)는 유닉스에서 텍스트 입력을 종료하거나 유닉스 셸을 종료시킨다.

제어 문자는 표시할 수 없는 문자이므로, 다른 방법으로 표현해야 한다. 다음은 ASCII 벨 문자의 표현 예시이다.


  • 코드 포인트: 십진법 7, 16진법 0x07
  • 약어: BEL
  • 약어로 나타낸 표시용 도형 문자: Unicode U+2407 (␇)
  • ISO 2047에서 정해진 제어 문자의 기호: Unicode U+237E (⍾)
  • 캐럿 표기법: ^G
  • 이스케이프 시퀀스: \a

3. 1. 주요 ASCII 제어 문자

wikitext

ASCII의 제어 문자 중에서 여전히 일반적으로 사용되는 문자는 다음과 같다.

CS10진수16진수약어기호명칭C 언어설명
^@0000NUL\0원래는 종이 테이프의 끝 부분의 데이터가 기록되지 않은 부분을 컴퓨터가 건너뛰도록 하기 위해 "아무것도 하지 않음" 코드로서 정해졌다. 나중에 텔레타이프 단말기가 캐리지 리턴이나 라인 피드를 물리적으로 처리할 시간을 벌기 위해 삽입되기도 했다. 현재는 C 언어 등에서 문자열의 끝을 나타내는 데 사용된다.
^G0707BEL\a원래는 통신 상대방의 단말기의 을 울리는 데 사용되었다. 현재는 물리적인 벨 대신 비프음을 울린다. 터미널 에뮬레이터에서는 소리를 내지 않고 창을 깜빡이게 하는 것도 있다.
^H0808BS백스페이스\b원래는 커서를 앞쪽(왼쪽)으로 이동시켜 겹쳐쓰기를 하여 악센트 부호가 있는 문자를 입력하기 위해 사용되었다. 현재는 커서를 앞쪽(왼쪽)으로 이동시켜 해당 문자를 삭제하는 데 사용된다.
^I0909HT수평 탭\t수평 방향의 탭. 텍스트 데이터의 데이터 구분에 사용될 수도 있다.
^J100ALF라인 피드\nLine Feed는 "줄 넘김"의 의미이다. 타자기에서는 커서를 열(수평 방향)은 그대로 두고 1행 아래로 이동시킨다. UNIX에서는 LF 단독으로 줄 바꿈 코드로 처리되어 라인 피드와 열의 복귀를 수행한다. MS-DOSWindows에서는 CR과 LF를 함께 사용한다.
^K110BVT수직 탭\v수직 방향의 탭.
^L120CFF양식 피드\f프린터에서는 다음 페이지를 급지한다. 많은 프로그래밍 언어에서는 공백으로 처리되며 코드의 논리적 구분을 나누는 데 사용된다. 몇몇 터미널 에뮬레이터에서는 화면을 지웁니다. 일반 텍스트로 기술되는 RFC에서는 페이지 분할 문자로 사용된다.
^M130DCR캐리지 리턴\r원래는 커서를 같은 행의 시작 열(왼쪽 끝)로 이동시키는 데 사용되었다. macOS 이전의 클래식 Mac OS에서는 CR 단독으로 줄 바꿈 코드로 처리되어 라인 피드와 열의 이동을 수행한다. MS-DOSWindows에서는 CR과 LF를 함께 사용한다.
^Z261ASUB대체원래는 전송 제어 문자로, 불분명하거나 유효하지 않은 문자를 수신했음을 나타낸다. 하지만 하위 레이어에서 오류 감지 및 정정이 수행되므로 이 용도로 사용할 필요는 거의 없으며, 다른 용도로 사용된다. 텍스트 파일의 파일 종료 (EOF)를 나타내는 데 자주 사용된다.
^[271BESC확장키보드의 Esc 키를 누르면 이 문자가 시스템으로 전송된다. 소프트웨어의 사용자 인터페이스에서는 화면, 메뉴, 모드에서 빠져나오는 데 사용된다. 프린터나 단말기 등의 장치 제어 프로토콜에서는 뒤에 오는 문자를 특별하게 해석할 것(이스케이프 시퀀스)을 지시하기 위해 사용된다.
^?1277FDEL삭제원래는 종이 테이프에서 잘못 구멍을 낸 부분의 모든 비트의 구멍을 뚫어 데이터를 삭제하는 데 사용되었다. 현대의 컴퓨터에서는 커서의 바로 오른쪽에 있는 문자를 삭제하는 데 사용된다.


3. 2. 제어 문자 표 (ASCII)



ASCII 제어 문자는 3210 코드 미만 (기술적으로 C0 제어 코드 세트)과 12710 (DEL) 코드이다.[1][2]

확장 ASCII 세트는 ISO 8859에 의해 정의되었으며 코드 12810부터 15910까지를 제어 문자로 추가했으며, C1 세트라고 한다.

ASCII 제어 코드.[3]
0x000x10
0x00NULDLE
0x01SOHDC1
0x02STXDC2
0x03ETXDC3
0x04EOTDC4
0x05ENQNAK
0x06ACKSYN
0x07BELETB
0x08BSCAN
0x09HTEM
0x0ALFSUB
0x0BVTESC
0x0CFFFS
0x0DCRGS
0x0ESORS
0x0FSIUS
0x7FDEL



CS10진수16진수약어명칭C 언어설명
^@0000NUL
Null
\0원래 종이 테이프의 끝부분에서 데이터가 기록되지 않은 부분을 컴퓨터가 건너뛰도록 하기 위한 "아무것도 하지 않음" 코드였다. 이후 텔레타이프 단말기가 캐리지 리턴이나 라인 피드를 물리적으로 처리할 시간을 벌기 위해 삽입되기도 했다. 현재는 C 언어 등에서 문자열의 끝을 나타내는 데 사용된다.
^A0101SOH헤더 시작
Start of Heading
통신 전송 중 헤더의 시작을 나타낸다.
^B0202STX텍스트 시작
Start of Text
통신 전송 중 텍스트 부분의 시작을 나타낸다.
^C0303ETX텍스트 종료
End of Text
통신 전송 중 텍스트 부분의 종료를 나타낸다. Control-C는 프로그램이나 프로세스를 중단시키는 데에도 사용된다.
^D0404EOT전송 종료
End of Transmission
데이터 전송 측이 데이터 전송 종료 시 데이터 수신 측에 EOT를 보낸다.
^E0505ENQ문의
Enquiry
데이터 전송 측이 데이터 전송을 시도할 때 데이터 수신 측에 데이터에 앞서 ENQ를 보낸다. 데이터 수신 측은 데이터 수신 가능 여부에 따라 ACK 또는 NAK를 보낸다.
^F0606ACK승인
Acknowledge
수신된 데이터에 이상이 없거나, ENQ 수신 후 데이터 수신이 가능한 상태이면 전송 측에 ACK를 보낸다.
^G0707BEL
Bell
\a원래 통신 상대방 단말기의 을 울리는 데 사용되었다. 현재는 비프음을 울리거나, 터미널 에뮬레이터에서는 창을 깜빡이게 한다.
^H0808BS백스페이스
Backspace
\b원래 커서를 왼쪽으로 이동시켜 겹쳐쓰기를 통해 악센트 부호가 있는 문자를 입력하는 데 사용되었다. 현재는 커서를 왼쪽으로 이동시켜 해당 문자를 삭제한다.
^I0909HT수평 탭
Horizontal Tabulation
\t수평 방향 탭. 텍스트 데이터의 구분에 사용될 수 있다.
^J100ALF라인 피드
Line Feed
\n"줄 넘김". 타자기에서는 커서를 열은 그대로 두고 1행 아래로 이동시킨다. UNIX에서는 LF 단독으로 줄 바꿈 코드로 처리한다. MS-DOSWindows에서는 CR과 LF를 함께 사용한다.
^K110BVT수직 탭
Vertical Tabulation
\v수직 방향 탭.
^L120CFF양식 피드
Form Feed
\f프린터에서 다음 페이지를 급지한다. 프로그래밍 언어에서는 공백으로 처리, 코드의 논리적 구분을 나누는 데 사용된다. 터미널 에뮬레이터에서는 화면을 지운다. RFC에서 페이지 분할 문자로 사용된다.
^M130DCR캐리지 리턴
Carriage Return
\r커서를 같은 행의 시작 열(왼쪽 끝)로 이동시킨다. macOS 이전의 클래식 Mac OS에서는 CR 단독으로 줄 바꿈 코드로 처리한다. MS-DOSWindows에서는 CR과 LF를 함께 사용한다.
^N140ESO시프트 아웃
Shift Out
다른 문자 코드 세트로 전환한다.
^O150FSI시프트 인
Shift In
일반적인 문자 코드 세트로 전환한다.
^P1610DLE데이터 링크 이스케이프
Data Link Escape
바이너리 통신임을 나타낸다. DLE 자체를 바이너리 데이터에 포함시키는 경우 DLE를 두 번 연속 전송한다.
^Q1711DC1장치 제어 1
Device Control 1
장치 제어를 위해 예약된 코드. 연결된 장치에 따라 해석이 다르다. DC1/DC2는 장치 작동, DC3/DC4는 일시 중지/중지에 사용된다. DC1(XON), DC3(XOFF)는 소프트웨어 흐름 제어에 사용되는 것이 사실상 표준이다.
^R1812DC2장치 제어 2
Device Control 2
^S1913DC3장치 제어 3
Device Control 3
^T2014DC4장치 제어 4
Device Control 4
^U2115NAK부정 응답
Negative Acknowledge
수신 데이터에 이상이 있거나, ENQ 수신 후 데이터 수신이 불가능한 상태일 때 전송 측에 NAK를 보낸다.
^V2216SYN동기 신호
Synchronous Idle
문자 동기 방식 통신에서 동기를 맞추는 데 사용한다.
^W2317ETB전송 블록 종료
End of Transmission Block
통신 전문의 한 블록(일련의 묶음으로 된 여러 전문) 종료를 나타낸다.
^X2418CAN취소
Cancel
선행 데이터에 오류가 있거나 무시해야 함을 나타낸다.
^Y2519EM매체 종료
End of Medium
수신 데이터 기록 매체(종이, 자기 테이프 등)가 기록 가능 범위 끝에 도달했음을 나타낸다.
^Z261ASUB대체
Substitute Character
불분명하거나 유효하지 않은 문자를 수신했음을 나타내는 전송 제어 문자였으나, 현재는 텍스트 파일의 파일 종료(EOF)를 나타내는 데 주로 사용된다.
^[271BESC확장
Escape
Esc 키를 누르면 시스템으로 전송된다. 사용자 인터페이스에서 화면, 메뉴, 모드에서 빠져나오는 데 사용된다. 장치 제어 프로토콜에서는 뒤에 오는 문자를 특별하게 해석(이스케이프 시퀀스)하도록 지시한다.
^\281CFS파일 분리
File Separator
데이터 구조 필드 기록 구분 문자. 계층적 구조에서 US는 최하위 레벨(일반 텍스트 데이터 항목) 분할, RS, GS, FS는 각각 하위 레벨 항목 그룹 분리.
^]291DGS그룹 분리
Group Separator
^^301ERS레코드 분리
Record Separator
^_311FUS유닛 분리
Unit Separator
^?1277FDEL삭제
Delete
종이 테이프에서 잘못 뚫린 부분의 모든 비트 구멍을 뚫어 데이터 삭제에 사용되었다. 현대 컴퓨터에서는 커서 바로 오른쪽 문자를 삭제한다.


4. 제어 문자 표현법

ASCII 제어 문자는 다양한 방법으로 표현될 수 있다. 다음은 벨 문자를 예시로 한 제어 문자 표현 방법들이다.


  • '''코드 포인트''': 십진수 7, 16진수 0x07
  • '''약어''': 주로 세 글자 대문자로 표현한다. (예: BEL)
  • '''특수 문자''': 유니코드 U+2407 (␇)와 같이, 제어 문자를 나타내는 특수 기호를 사용한다. ("벨 기호")
  • '''ISO 2047 그래픽 표현''': 유니코드 U+237E (⍾)와 같이, ISO 2047 표준에 정의된 그래픽 기호를 사용한다. ("벨 그래픽")
  • '''캐럿 표기법''': ASCII에서 코드 포인트 00xxxxx를 갖는 제어 문자는 캐럿(^) 뒤에 코드 포인트 10xxxxx에 해당하는 대문자를 붙여 표시한다. (예: ^G)
  • '''이스케이프 시퀀스''': C, C++ 등 프로그래밍 언어에서 사용되는 이스케이프 시퀀스를 사용한다. (예: \a, \007, \x07)


다음은 몇 가지 제어 문자의 예시이다.

코드 포인트 (10진)약어이스케이프 시퀀스 (C/C++)캐럿 표기법
0NUL\0^@
7BEL\a^G
8BS\b^H
9HT\t^I
10LF\n^J
12FF\f^L
13CR\r^M
27ESC\e^[
127DEL^?



5. 키보드와 제어 문자



ASCII 기반 키보드에는 "Control", "Ctrl" 또는 "Cntl"이라고 표시된 키가 있으며, 다른 문자 키와 함께 눌러 제어 문자를 생성한다. 컨트롤 키는 시프트 키와 유사하게 작동한다. 컨트롤 키는 함께 누르는 문자(주로 대문자)의 코드보다 64자리 낮은 코드를 생성한다. (대문자 ASCII 코드 값에서 0x40을 빼는 방식). 다른 구현 방식으로는 키에서 생성된 ASCII 코드를 가져와 0x1F와 비트 AND 연산을 수행하여 비트 5에서 7을 0으로 만들기도 한다.[5] 예를 들어, "control"과 "g"(이진수로 0110 0111)를 누르면 코드 7(벨 문자, 십진수로 7, 이진수로 0000 0111)이 생성된다.

널 문자(코드 0)는 Ctrl-@로 표시된다. "@"는 ASCII 문자 집합에서 "A" 바로 앞의 코드이다. 일부 터미널은 편의상 Ctrl-Space를 Ctrl-@의 별칭으로 허용한다. DEL 문자(코드 12710)는 Ctrl-?로 표현되기도 한다.

컨트롤 키를 누른 상태에서 문자 키를 누르면 shift 또는 캡스 락 키의 상태와 관계없이 동일한 제어 문자가 생성된다. 즉, 대문자나 소문자를 생성하는지는 중요하지 않다. 스페이스, 그래픽 문자 및 숫자 키(ASCII 코드 32~63)와 함께 컨트롤 키를 해석하는 방식은 시스템마다 다르다. 일부는 컨트롤 키를 누르지 않은 것과 동일한 문자 코드를 생성하는 반면, 다른 시스템은 컨트롤 키가 눌려 있으면 이러한 키를 제어 문자로 변환한다. 비 ASCII 키와 함께 컨트롤 키를 해석하는 방식도 시스템마다 다르다.

제어 문자는 캐럿 표기법으로 표현되기도 한다. 캐럿(^)과 제어 문자의 값에 64를 더한 ASCII 문자를 인쇄하여 표시한다. 예를 들어, ^G는 코드 7을 나타내며, 컨트롤 키를 누른 상태에서 G 키를 누르면 생성된다.

키보드는 일반적으로 제어 문자 코드를 생성하는 몇 개의 단일 키를 가지고 있다. 예를 들어, "Backspace" 키는 코드 8, "Tab"은 코드 9, "Enter" 또는 "Return"은 코드 13을 생성한다. (일부 키보드는 "Enter"에 대해 코드 10을 생성할 수 있음).

많은 키보드는 ASCII 인쇄 가능 또는 제어 문자에 해당하지 않는 키(커서 제어 화살표, 워드 프로세싱 기능 키 등)를 포함한다. 이러한 키 누름은 다음 네 가지 방법 중 하나로 컴퓨터 프로그램에 전달된다.


  • 사용하지 않는 제어 문자 사용
  • ASCII가 아닌 다른 인코딩 사용
  • 여러 문자로 구성된 제어 시퀀스 사용
  • 문자 생성 외 추가 메커니즘 사용


"멍청한" 컴퓨터 터미널은 일반적으로 제어 시퀀스를 사용한다. 1980년대 독립형 개인용 컴퓨터 키보드는 주로 처음 두 가지 방법 중 하나(또는 둘 다)를 사용했다. 최신 컴퓨터 키보드는 눌러진 특정 물리적 키를 식별하는 스캔 코드를 생성하고, 컴퓨터 소프트웨어가 이를 처리한다.

6. 유니코드와 제어 문자



ASCII에는 33개, ECMA-48 표준에는 32개의 제어 문자가 추가되어 상당히 많은 수의 제어 문자가 정의되었다. 초기 터미널은 상태를 기억하는 API 구현에 비용이 많이 드는 원시적인 기계적 또는 전기적 제어 장치를 사용했기 때문에, 모든 기능에 대해 각기 다른 코드가 필요했다. 그러나 기능을 수행하기 위한 코드 시퀀스 해석이 빠르게 가능해지고 저렴해지면서, 장치 제조업체들은 수백 개의 장치 명령을 전송하는 방법을 찾게 되었다. 밥 베머가 발명한 이 메커니즘은 ASCII 코드 2710(이스케이프 문자)을 사용하고, 그 뒤에 "제어 시퀀스" 또는 "이스케이프 시퀀스"라고 하는 일련의 문자를 사용하는 방식이다. 예를 들어, 코드 2710 시퀀스 뒤에 인쇄 가능한 문자 "[2;10H"가 오면 Digital Equipment Corporation(DEC) VT100 터미널의 커서를 화면의 두 번째 줄의 10번째 셀로 이동시킨다. 이러한 시퀀스에 대해 ANSI X3.64를 포함한 여러 표준이 존재하지만, 비표준 변형도 많다.

ASCII 표에서 3210 코드 미만(기술적으로 C0 제어 코드)의 모든 항목은 텍스트 줄 구분에 사용되는 CR 및 LF를 포함한다. 코드 12710(DEL) 역시 제어 문자이다.[1][2] 확장 ASCII는 ISO 8859에 의해 정의되었으며, 코드 12810부터 15910까지를 제어 문자로 추가했다. 이는 주로 상위 비트를 제거할 경우 인쇄 문자가 C0 제어 코드로 변경되지 않도록 하기 위함이었다. 이 두 번째 세트를 C1 제어 코드라고 한다.

이 65개의 제어 코드는 유니코드로 이전되었다. 유니코드는 제어 코드로 간주될 수 있는 더 많은 문자를 추가했지만, "서식 문자"(예: 너비가 0인 문자 결합 안 함)와 65개의 제어 문자를 구별한다.

확장 2진화 10진 코드 교환 코드(EBCDIC) 문자 세트는 모든 ASCII 제어 코드와 IBM 주변 장치를 제어하는 데 주로 사용되는 추가 코드를 포함하여 65개의 제어 코드를 포함한다.

ASCII 제어 코드.[3]
0x000x10
0x00NULDLE
0x01SOHDC1
0x02STXDC2
0x03ETXDC3
0x04EOTDC4
0x05ENQNAK
0x06ACKSYN
0x07BELETB
0x08BSCAN
0x09HTEM
0x0ALFSUB
0x0BVTESC
0x0CFFFS
0x0DCRGS
0x0ESORS
0x0FSIUS
0x7FDEL



ASCII 제어 문자 중 현재도 일반적으로 사용되는 문자는 다음과 같다.


  • 0x00 (): 원래 무시되는 문자였지만, 현재 C를 포함한 많은 프로그래밍 언어에서 문자열의 끝을 표시하는 데 사용된다.
  • 0x07 (벨): 장치에서 벨 소리, 삐 소리, 화면 깜박임 등의 경고를 발생시킬 수 있다.
  • 0x08 (백스페이스): 이전 문자를 덮어쓸 수 있다.
  • 0x09 (수평 탭): 인쇄 위치를 다음 탭 정지점으로 오른쪽으로 이동시킨다.
  • 0x0A (줄 바꿈): 인쇄 헤드를 한 줄 아래로 이동시키거나 왼쪽 가장자리로 이동시킨다. 대부분의 유닉스 시스템 및 그 변형에서 줄 끝 표시자로 사용된다.
  • 0x0B (수직 탭): 수직 탭.
  • 0x0C (양식 피드): 프린터가 다음 페이지 맨 위로 용지를 배출하거나 비디오 터미널에서 화면을 지우도록 한다.
  • 0x0D (캐리지 리턴): 인쇄 위치를 줄의 시작 부분으로 이동시켜 덮어쓰기를 가능하게 한다. 클래식 Mac OS, OS-9, FLEX 및 그 변형에서 줄 끝 표시자로 사용된다. CR+LF 쌍은 CP/M-80, DOS, Windows를 포함한 그 파생물과 FTP, SMTP, HTTP 등의 응용 계층 통신 프로토콜에서 사용된다.
  • 0x1A (Control-Z): Windows 텍스트 모드 파일 입출력(i/o)에서 파일 끝으로 작동한다.
  • 0x1B (이스케이프): 이스케이프 시퀀스를 시작한다.


사용자가 입력할 때 제어 문자는 특정 동작을 수행하는 것으로 설명될 수 있다. 예를 들어, 코드 3(텍스트 종료 문자, ETX)은 실행 중인 프로세스를 중단시키고, 코드 4(전송 종료 문자, EOT)는 유닉스에서 텍스트 입력을 종료하거나 유닉스 셸을 종료하는 데 사용된다. 이러한 사용은 일반적으로 출력되는 텍스트에 있을 때의 사용과는 거의 관련이 없다.

유니코드에서 "제어 문자"는 U+0000~U+001F (C0 제어 문자), U+007F (삭제), U+0080~U+009F (C1 제어 문자)를 말한다. 이들의 일반 범주는 "Cc"이다. 서식 코드는 이와 구별되며, 일반 범주 "Cf"에 속한다. Cc 제어 문자는 유니코드에 이름이 없지만, ""와 같은 레이블이 부여된다.

7. 현대적 응용

(요약 및 참조할 원본 소스가 제공되지 않았으므로, 이전 출력을 수정할 수 없습니다.)

참조

[1] 간행물 ASCII format for network interchange 1969-10-01
[2] 서적 American National Standard Code for Information Interchange {{!}} ANSI X3.4-1977 https://nvlpubs.nist[...] National Institute for Standards 1977
[3] 문서 MS-DOS QBasic v1.1 Documentation Microsoft 1987-1991
[4] 간행물 The Unicode Standard Version 13.0 – Core Specification https://www.unicode.[...] Unicode, Inc.
[5] 웹사이트 ASCII Characters http://geocities.com[...] 2010-10-08
[6] 간행물 ASCII format for Network Interchange 1969-10
[7] 문서 ただし、[[スペース]]は見た目には何も表示されないが、図形文字の一種である。
[8] 문서 MS-DOS QBasic v1.1 Documentation Microsoft 1987-1991
[9] 문서 General Category Unicode 5.2, Chapter 4



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com