확장 ASCII

[섬네일|[시그윈의  프로그램 출력]]
**확장 ASCII**(Extended ASCII)는 원래 ASCII 문자 집합 96개(대부분)와 최대 128개의 추가 문자를 포함하는 문자 인코딩의 레퍼토리이다. "확장 ASCII"에 대한 공식적인 정의는 없으며, 이 용어의 사용 자체도 비판받기도 하는데, 이는 미국 국가표준 협회 (ANSI)가  표준을 업데이트하여 더 많은 문자를 포함했다거나, 이 용어가 단일하고 명확한 인코딩을 식별한다는 오해를 불러일으킬 수 있기 때문이다. 이 두 가지 모두 사실이 아니다.

ISO 8859 표준은 ASCII 문자 집합의 (제한된) 확장을 공식화한 최초의 국제 표준이었다. 이 표준이 인코딩한 많은 언어 변형 중 ISO 8859-1("ISO Latin 1")대부분의 서유럽 언어를 지원한다은 서구에서 가장 잘 알려져 있다. 그 외에도 많은 확장 ASCII 인코딩(220개 이상의 도스 및 윈도우 코드 페이지)이 존재한다. 확장 이진화 십진법 교환 부호("다른" 주요 문자 코드) 또한 수십 년에 걸쳐 많은 확장 변형(186개 이상의 확장 이진화 십진법 교환 부호 코드 페이지)을 개발했다.

모든 현대 운영체제는 수천 개의 문자를 지원하는 유니코드를 사용한다. 그러나 확장 ASCII는 컴퓨팅 역사에서 여전히 중요하며, 여러 확장 ASCII 문자 집합을 지원하기 위해서는 나중에 UTF-8 인코딩 방식을 더 쉽게 지원할 수 있도록 소프트웨어를 작성해야 했다.

## 역사

ASCII는 1960년대 전신타자기와 전보, 그리고 일부 컴퓨팅을 위해 설계되었다. 초기 전신타자기는 전자기식이었고, 마이크로프로세서가 없었으며, 작동에 필요한 최소한의 전자기식 메모리만 가지고 있었다. 이들은 한 번에 한 문자를 완전히 처리하고 즉시 유휴 상태로 돌아갔다. 이는 모든 제어 시퀀스가 한 문자 길이여야 함을 의미했으며, 따라서 많은 수의 코드를 그러한 제어용으로 예약해야 했다. 이들은 타자기에 기반한 타격식 프린터였으며, 금속 활자 요소에 주조된 고정된 글리프 집합만 인쇄할 수 있었다. 이는 또한 최소한의 글리프 집합을 권장했다.

7비트 ASCII는 이전의 5비트 및 6비트 코드보다 개선되었다. 27=128개의 코드 중 33개는 제어용으로 사용되었고, 95개의 신중하게 선택된 인쇄 가능 문자(94개의 자체와 하나의 공백)가 포함되었는데, 여기에는 영어 알파벳(대소문자), 숫자, 그리고 31개의 문장 부호와 기호가 포함되었다. 이는 표준 미국 타자기에 있는 모든 기호와 프로그래밍 작업에 선택된 몇 가지 기호를 포함한다. 일부 인기 있는 주변 장치는 64개의 인쇄 문자 하위 집합만 구현했다. 텔레타이프 모델 33은 "a"부터 "z"까지 또는 덜 일반적인 다섯 가지 기호(, , , }, 및 )를 전송할 수 없었으며, 그러한 문자를 받으면 대신 "A"부터 "Z"까지(강제 올 캡스)와 다른 다섯 가지 유사한 기호(, , , , 및 )를 인쇄했다.

ASCII 문자 집합은 미국 영어를 사용하기에는 겨우 충분하며, 조판에 흔한 많은 자체(글리프)가 부족하고, 보편적으로 사용하기에는 너무 작다. 영어 외의 알파벳 문자, 더 많은 종류의 문장 부호와 간격, 더 많은 수학 연산자와 기호(× ÷ ⋅ ≠ ≥ ≈ π 등), 일부 프로그래밍 언어에서 사용하는 고유한 기호, 표의문자, 표어문자, 상자 그리기 문자 등 훨씬 더 많은 문자와 기호가 바람직하거나 유용하거나 필요하다.

전 세계 컴퓨터 사용자에게 가장 큰 문제는 각 지역 알파벳의 필요성이었다. ASCII의 영어 알파벳은 발음 구별 기호 없이 악센트가 붙은 문자를 쓰거나  대신 와 같은 두 문자 근사치를 사용한다면 유럽 언어를 거의 수용할 수 있다. 7비트 ASCII의 수정된 지역 변형이 즉시 나타나, 덜 사용되는 일부 기호를 매우 원하는 기호나 문자로 교환했는데, 예를 들어 영국 전신타자기에서 를 로, 일본에서 를 로 또는 한국에서 로 대체하는 식이었다. 최소 29가지 변형 집합이 생겨났다. 최소 한 가지 국가 집합에 의해 12개의 코드 포인트가 수정되어 82개의 "불변" 코드만 남았다. 그러나 프로그래밍 언어는 대체된 문자 중 상당수에 의미를 할당했기 때문에 C 언어의 세 문자 시퀀스  및 를 사용하여  및 }를 나타내는 것과 같은 해결 방법이 고안되었다. 기본 알파벳이 다른 언어는 전사(transliteration)를 사용할 수 있었는데, 예를 들어 모든 라틴 문자를 가장 가까운 키릴 문자로 대체하는 방식이었다(영어가 키릴 문자로 인쇄되거나 그 반대의 경우 이상하지만 어느 정도 읽을 수 있는 텍스트가 생성됨). 또한 두 문자를 겹쳐 인쇄(종종 백스페이스 제어 문자를 사용하여)하여 악센트가 붙은 문자를 생성하는 방법도 고안되었다. 사용자들은 이러한 타협안에 만족하지 못했고, 지원도 제대로 이루어지지 않는 경우가 많았다.

1970년대에 컴퓨터와 주변기기가 8비트 바이트를 표준으로 사용하면서, 컴퓨터와 소프트웨어가 256자 집합을 사용하는 텍스트를 거의 추가적인 프로그래밍 비용 없이 처리할 수 있으며, 저장 비용도 추가되지 않는다는 점이 명백해졌다(각 바이트의 사용되지 않는 8번째 비트가 오류 검사, 부울 필드 또는 8문자를 7바이트로 압축하는 등의 방식으로 재사용되지 않는다고 가정할 경우). 이는 ASCII를 변경 없이 사용할 수 있게 하고 128개의 문자를 더 제공할 수 있게 할 것이다. 많은 제조업체들은 ASCII와 최대 128개의 사용되지 않는 코드로 구성된 8비트 문자 집합을 고안했다. 따라서 모든 주요 서유럽(및 라틴 아메리카) 언어 등을 포함하는 인코딩을 만들 수 있었다.

128개의 추가 문자는 모든 목적, 모든 언어, 심지어 모든 유럽 언어를 포괄하기에는 여전히 충분하지 않으므로, 많은 독점 및 국가별 ASCII 파생 8비트 문자 집합의 등장은 불가피했다. 이러한 집합 간의 변환(트랜스코드)은 복잡하며(특히 한 문자가 두 집합 모두에 없는 경우), 종종 수행되지 않아 문자 깨짐(부분적으로 읽을 수 있는 결과 텍스트로, 사용자가 수동으로 디코딩하는 방법을 배우는 경우가 많았음)이 발생했다. 1990년대 후반에 국가 및 국제 표준 기관의 협력 또는 조정 시도가 있었지만, 국제 표준이 특정 문화에 인기 있거나 특유한 문자를 제외했기 때문에 제조업체 독점 집합이 훨씬 더 인기를 유지했다.

## 독점 확장

메인프레임 및 미니컴퓨터 특히 대학에서 수학, 과학 및 언어 교육을 지원해야 하는 필요성을 충족하기 위해 다양한 독점적인 ASCII 수정 및 확장이 등장했다.

휴렛 팩커드는 1978/1979년경 워크스테이션, 터미널 및 프린터에 사용할 목적으로 확장된 7비트/8비트 ASCII 문자 세트인 HP Roman Extension에 유럽 문자를 추가하기 시작했다. 이는 나중에 널리 사용되는 일반 8비트 문자 세트인 HP Roman-8 및 HP Roman-9(및 여러 변형)로 발전했다.

아타리와 코모도어 가정용 컴퓨터는 비표준 ASCII(각각 1963년의 원본 ASCII 표준에 기반한 ATASCII 및 PETSCII)에 많은 그래픽 기호를 추가했다.

TRS-80 가정용 컴퓨터를 위한 TRS-80 문자 집합은 저해상도 블록 그래픽을 구현하는 64개의 반 그래픽 문자(0x80부터 0xBF까지)를 추가했다. (각 블록 그래픽 문자는 2x3 픽셀 그리드로 표시되었으며, 각 블록 픽셀은 하위 6비트 중 하나에 의해 효과적으로 제어되었다.)

IBM은 최초의 IBM PC에 8비트 확장 ASCII 코드를 도입했으며, 나중에 다양한 언어와 문화를 위한 변형을 만들었다. IBM은 이러한 문자 집합을 코드 페이지라고 부르고 참조 번호를 할당했다. 이는 IBM 자체가 고안한 것뿐만 아니라 다른 제조업체가 고안하고 사용한 많은 것들을 포함한다. 따라서 문자 집합은 IBM 코드 페이지 번호로 표시되는 경우가 매우 많다. ASCII 호환 코드 페이지에서 하위 128개 문자는 표준 ASCII 값을 유지했으며, 상위 128개 문자에서는 다른 페이지(또는 문자 집합)를 사용할 수 있었다. 예를 들어, 북미 시장용으로 제작된 도스 컴퓨터는 코드 페이지 437을 사용했는데, 여기에는 프랑스어나 독일어와 같은 몇몇 유럽 언어에 필요한 악센트 문자뿐만 아니라 일부 그래픽 선 그리기 문자도 포함되었다. 더 큰 문자 집합 덕분에 영어와 프랑스어를 조합한 문서(프랑스 컴퓨터는 보통 코드 페이지 850을 사용하지만)를 만들 수 있었지만, 예를 들어 영어와 그리스어를 조합한 문서(이는 코드 페이지 737이 필요함)는 만들 수 없었다.

애플 컴퓨터는 Mac OS 로마와 같이 맥 OS에 자체적인 8비트 확장 ASCII 코드를 도입했다. 애플 레이저프린터는 또한 포스트스크립트 문자 집합을 도입했다.

디지털 이큅먼트 코퍼레이션(DEC)은 더 적은 문자 수를 가졌지만 더 많은 글자와 발음 구별 기호 조합을 가진 다국적 문자 집합을 개발했다. 이는 VT220 및 이후의 DEC 단말기에서 지원되었다. 이는 나중에 로터스 국제 문자 집합(LICS), ECMA-94 및 ISO 8859-1과 같은 다른 문자 집합의 기반이 되었다.

## ISO 8859

1987년, 국제 표준화 기구(ISO)는 8비트 ASCII 확장을 위한 표준 집합인 ISO 8859를 발행했다. 이 중 가장 인기 있는 것은 ISO 8859-1("ISO Latin&nbsp;1"이라고도 함)으로, 가장 일반적인 서유럽 언어에 충분한 문자를 포함하고 있다. 8859 그룹의 다른 표준으로는 라틴 문자를 사용하는 동유럽 언어를 위한 ISO 8859-2와 키릴 문자를 사용하는 언어를 위한 ISO 8859-5 등이 있었다.

ISO 표준이 일부 벤더별 확장 ASCII 문자 세트와 다른 주목할 만한 점 중 하나는 확장 블록의 처음 32개 코드 포인트가 ISO 표준에서 제어용으로 예약되어 인쇄 가능한 문자에는 사용할 수 없다는 것이다. 이 정책은 ASCII의 처음 32개 코드 포인트를 차지하는 C0 제어 코드 블록을 모방했다. 이 표준의 이러한 측면은 다른 확장 ASCII 세트에서는 거의 보편적으로 무시되었다.

## Windows-1252

마이크로소프트는 Windows에서 ISO 8859 표준을 사용할 예정이었으나, 곧 C1 제어 코드를 추가 문자로 대체하여 독점적인 Windows-1252 문자 집합을 만들었다. 추가된 문자에는 "곱슬" 따옴표, 엠 대시, 유로 기호, 그리고 ISO-8859-15의 프랑스어 및 핀란드어 문자가 포함되었다. 이는 세계에서 가장 많이 사용되는 확장 ASCII가 되었으며, 종종 웹에서 8859-1이 지정되어 있더라도 사용된다.

## 문자 집합 혼동
확장 코드를 포함하는 텍스트 데이터(문자 시퀀스)를 올바르게 해석하고 표시하려면 텍스트를 읽거나 수신하는 소프트웨어는 해당 텍스트가 작성된 특정 인코딩을 사용해야 한다. 잘못된 인코딩을 선택하면 종종 심하게 잘못된 문자가 표시되는데, 이를 일본 용어로 문자 깨짐이라고 한다. 모든 "확장 ASCII" 인코딩에서 ASCII가 공통이므로, 잘못된 인코딩을 사용해도 읽을 수 있는 영어(또는 A-Z만 사용하는 모든 언어)뿐만 아니라 숫자 및 대부분의 구두점은 유지된다.

많은 통신 프로토콜, 특히 SMTP와 HTTP는 소프트웨어가 여러 인코딩을 올바르게 해석하도록 하기 위해 콘텐츠의 문자 인코딩을 IANA가 할당한 문자 집합 식별자로 태그 지정하도록 요구한다. 그러나 대다수의 소프트웨어는 사용자가 선호하는 인코딩을 나타내는 시스템 설정에 의존하거나 가정된 설정을 컴파일한다.

현대에 유니코드는 거의 모든 비ASCII 인코딩 사용을 대체했다. 많은 인터넷 표준이 ISO 8859-1을 사용하고, 마이크로소프트 윈도우(서유럽 및 아메리카에서 사용되는 대부분의 언어의 경우)가 ISO 8859-1의 상위 집합인 CP1252를 사용하기 때문에, 일반적으로 유효한 UTF-8이 아닌 바이트 스트림은 CP1252 또는 시스템 설정에 있다고 가정하는 것이 안전하다.

## 같이 보기
* 
* 다이어그래프와 트라이그래프 (프로그래밍)
* 
* 유니코드 문자 목록
* 

## 내용주

## 각주

## 외부 링크
* ASCII에 대한 짧은 페이지, OEM 8비트 차트 및 ANSI 8비트 차트 포함

분류:문자 집합
분류:ASCII