본문 바로가기
컴퓨터 과학(CS)/기타

아스키코드(ASCII), 유니코드

by Bentist 2021. 12. 20.

배경 지식

컴퓨터 내부에는 수많은 트랜지스터가 존재한는데, 트랜지스터는 전기 신호로 작동하는 스위치다.

  • 전기 신호가 들어오면(ON) 컴퓨터는 이것을 1로 인식
  • 전기 신호가 없으면(OFF), 컴퓨터는 이것을 0으로 인식

즉, 컴퓨터는 트랜지스터를 통해 사용자가 입력한 데이터를 0과 1로 처리하여 이해한다.

  • 비트: 0과 1로 정보를 표현하는 최소 단위(정보를 0, 1 두 가지로 밖에 표현 불가능)
  • 바이트(8비트): 정보를 표현하는 기본 단위

 

아스키코드(ASCII)

컴퓨터와 소통하기 위해서는 우리가 사용하는 문자나 기호숫자로 변환(인코딩)해서 알려줘야 하는 필요가 생겼다.
아스키코드는 알파벳과 숫자, 특수문자 등 128개의 문자를 0과 1의 숫자 조합으로 대응시킨 문자 인코딩 방식이다.
ex. 소문자 a의 아스키코드 97: 0110 0001
ex. 영화 <마션>에서 주인공이 NASA와 아스키코드로 통신함. (16진법)


cf. 문자 인코딩(부호화)
사용자가 입력한 문자기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것을 말한다. 이를 문자 인코딩(부호화)라 하며, 디코딩(복호화)은 부호(code)화되기 전으로 되돌리는 처리 방식이다. 그리고 복호화하여 본래의 문자나 기호를 뜻하게 되는 부호를 ‘문자코드’ 또는 ‘문자부호’라고 부른다.

ex. 전기 스위치를 길게/짧게 두드려 알파벳을 나타내는 모스 부호, 아스키코드, 유니코드 인코딩 방식인 UTF-8/UTF-16

 

아스키코드는 1960년대에 미국 표준협회(ANSI)에서 표준화한 정보교환용 7비트 부호체계를 만들었다.
아스키코드는 52개의 영문 알파벳 대소문자, 10개의 숫자, 32개의 특수 문자, 33개 의 출력 불가능한 제어 문자, 그리고 하나의 공백 문자를 포함하여 총 128개로 이루어진다. 그런데, 컴퓨터의 기본 저장 단위는 1byte(8bit)다. 그래서 아스키코드는 2의 8제곱인 256개를 사용할 수 있지만 7비트 128개(0~127)의 고유한 값만 사용한다. 그 이유는 7비트로 128개의 모든 문자를 표현할 수 있었고, 나머지 1비트를 통신 에러 검출을 위해 parity bit라고 불리 는 비트에 사용된다. 그래서 실제로 0(parity bit)을 채우고 나머지 7비트만 사용해서 문자를 나타낸다.
ex. 0011 1100 / 0101 1101 / 0001 0011

 

유니코드(UNICODE)

시간이 지나면서 영어뿐만 아니라 나라별 언어들의 수많은 문자까지도 처리하려면 1byte로 정의된 아스키코드로는 표현이 불가능했다. 그래서 전 세계의 모든 문자컴퓨터에서 일관되게 표현하기 위해 나온 표준코드 체계가 유니코드이다. 즉, 유니코드글자와 코드가 1:1로 매핑되어 있는 ‘코드표’이다.
ex. 한글 ‘가’: U+AC00

이제 유니코드라는 표준화된 코드표가 정의되었다. 남은 것은 이 코드표에 나온 문자들을 컴퓨터가 이해할 수 있도록 인코딩하는 작업이 필요하다.

예를 들어 유니코드 코드표에서 'A'는 U+0041, '가'는 U+AC00에 매핑되어 있다. 그리고 이 유니코드를 인코딩하는 방식에 대표적으로 UTF-8, UTF-16가 있다.

 

🔎 왜 UTF-8과 UTF-16으로 나누어졌을까?

알파벳은 1byte 만로도 충분히 표현 가능하기 때문에 2byte부터 문자를 할당하는 UTF-16 인코딩 방식은 영어권 사용자들에게 메모리 낭비가 2배가 된다. 그래서 UTF-8, UTF-16 등의 유니코드를 사용하는 인코딩 방식이 생기게 되었다.

 

UTF-8

  • 유니코드 위한 가변 길이 문자 인코딩 방식
  • 문자를 나타내기 위한 기본 단위8bit(1byte)이며 1~4바이트까지 사용
  • ASCII문자는 1바이트 사용, 한글은 3바이트 사용

 

UTF-16

  • 유니코드 위한 가변 길이 문자 인코딩 방식
  • 문자를 나타내기 위한 기본 단위 16bit(2byte)이며 2, 4바이트만 사용
  • 거의 모든 문자에 2바이트 사용

'컴퓨터 과학(CS) > 기타' 카테고리의 다른 글

직렬화, XML, JSON, YAML  (0) 2022.01.26
컴파일러, 인터프리터 차이  (2) 2021.12.22

댓글