개요
컴퓨터는 언제나 0과 1만 인식할 수 있다.
모든 문자는 이진수로 변환되어 저장되고 이진수가 다시 문자로 변환되어 우리에게 보이게 된다.
이 과정을 문자 인코딩, 문자 디코딩이라고 한다.
인코딩 방법들
아스키 코드 이전
아스키 코드 이전 천공 카드(Punched Card)에 사용된 헤르먼 홀러리스가 만든 홀러리스 코드가 있었다.
(홀러리스가 만든 회사인 TMC는 IBM의 전신이라고 한다) https://en.wiktionary.org/wiki/Hollerith_code
아스키 코드 등장 배경
당시 컴퓨터 메인프레임 제조 시장의 선두주자인 IBM은 문자 변환 체계를 가지고 있었지만 이는 자사 시스템에서만 동작하는 BCD, EBCDIC로 폐쇄적인 특징을 가졌었다.
여러 제조업체에서는 서로 다른 시스템에서도 데이터 교환이 필요했기 때문에 ANSI의 공개 표준인 ASCII가 등장한다.
https://en.wikipedia.org/wiki/EBCDIC
아스키코드(ASCII)
American Standard Code for Information Interchange의 약자라고 한다.
ANSI에서 표준화 해서 이렇게 이름이 붙은 듯 하다.(1963년)
아스키코드는 7bit를 사용해 총 0~127 까지의 128개 문자를 표현할 수 있다.
생각해보면 1바이트(8bit)를 사용할테고, 부호가 없으니까 0~255까지 사용가능해야 하는거 아니야? 라고 느꼈지만
검색해보니 1bit은 parity bit으로 사용했다고 한다.
아래는 아스키코드 테이블을 나타낸 페이지이다.
Ascii table for IBM PC charset (CP437) - Ascii-Codes
Code page 437 (IBM PC) American Standard Code for Information Interchange (ASCII) is a widely used character encoding system introduced in 1963. The original character set, which is now referred as the standard character set was initially composed of 128 c
www.ascii-codes.com
아스키 코드 확장
128개의 문자만으로는 전세계에 문자를 모두 표현할 수가 없었다. 따라서 당시 아스키를 확장하려는 시도들을 했다.
IBM에서는 유럽의 문자까지 표현하기 위해 Codepage 437을 사용했다.(1981년) https://en.wikipedia.org/wiki/Code_page_437
링크 안의 테이블을 보면 0~255까지 범위를 사용하는 것을 볼 수 있다.
이 당시에는 하드웨어의 발전으로 다른 방식으로도(Checksum, CRC 등) 에러 체크가 가능했고 따라서 parity bit에 사용했던 1bit을 문자표현에 사용할 수 있게되었다.
Codepage 437은 더 많은 조합이 필요한 동양의 언어는 표현할 수 없었다.
1바이트(SBSC(Single Byte Characet Set))만으로는 언어를 호환되게 전부 표현할 수 없었기 때문에 MBCS(Multi-Byte Character Set)가 등장했다.
말 그대로 여러 바이트를 사용하는 문자 인코딩 방법이다.
대표적인 예시로는 한국이 EUC-KR이 있다. (1987년)
위의 방식들은 철저히 자신 국가의 문자를 표현하기 위한 방식이었다.
유니코드(Unicode)
유니코드는 모든 언어를 하나의 인코딩으로 표현하자는 목표로 만들어졌다.
제록스의 조 베커와 애플의 리 콜리스, 마크데이비스는 통일된 문자 집합을 만들기 위해 연구했고 1988년에 유니코드 초안을 출판했다. https://www.unicode.org/history/unicode88.pdf
1991년에 유니코드 컨소시엄을 통해 유니코드를 발표하게된다.
1991년에는 WWW의 등장으로 인해 전 세계적인 데이터 교환이 활발해졌고 다국어 지원이 중요해졌다.
다국어를 동시에 표현할 수 있는 유니코드였기에 빠르게 받아들여졌다.
초기 유니코드는 16bit를 사용했는데 영어 같은 초기 ASCII 코드로도 표현할 수 있는 문자는 메모리 낭비가 생겼다.(고정 길이)
1992년 케네스 톰슨과 롭 파이크는 UTF-8을 고안한다.
UTF(Unicode Transformation Format) -8(bit) 은 가변 길이 인코딩을 사용해 문자에 따라 1~4 바이트를 통해 표현했다.
이를 통해 ASCII 기반 언어를 표현할 때 메모리 낭비를 최소화했다.
또 다르게 많이 봤던 UTF-16은 2바이트씩 끊어서 읽는 방식으로 ASCII 범위라도 2바이트로 끊어서 읽는다.
UTF-16은 초기 유니코드의 16비트 한계를 극복하면서, 기존 16비트 기반 시스템과의 호환성을 유지하기 위해 등장했다.
++왜 문자를 나타내는 말이 character와 string이야?
문자가 character인건 그렇다 치고 문자열은 왜 string일까 갑자기 궁금해졌다.
https://en.wikipedia.org/wiki/String_%28computer_science%29
-> 이거 보고 궁금증 해결
'CS > 프밍 잡지식' 카테고리의 다른 글
| Overlapped I/O 알아보기 - 2 (0) | 2025.12.09 |
|---|---|
| Overlapped I/O 알아보기 - 1 (0) | 2025.12.04 |
| 컴퓨터의 시간측정 응용 - FixedUpdate (1) | 2025.07.03 |
| 함수 호출 시 일어나는 일 (0) | 2025.06.29 |
| switch case 그리고 점프 테이블 (1) | 2025.04.17 |