꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

HTML

아스키(ASCII) 코드와 유니코드(Unicode)

gold_dragon 2020. 8. 26. 17:20

1. 문자 자료는 디지털로 어떻게 표현될까?

시용자가 컴퓨터에 입력을 하면 컴퓨터에서 그 입력을 바로 받아들이고 출력해주지 않습니다. 컴퓨터는 2진수로 처리된 입력값을 받을 수 있습니다. 그래서 중간에 입력값을 2진수로 바꿔주는 처리과정이 필요합니다. 즉, '입력 - 처리 - 출력'의 과정을 거칩니다.

 

다시 생각해보면 각 문자들은 정해저 있는 2진수 값이 있다고 볼 수 있습니다. 이렇게 각 문자를 구분하기 위해 각각 약속된 이진수의 값을 정해놓은 코드를 문자 코드라고 합니다. 문자 정보에는 0~9, A~Z, a~z, 특수문자 등과 같은 문자와 공백이며, enter 키를 누르는 것도 문자로 취급됩니다.

 

이 문자 코드에는 종류가 여러가지가 있는데 이번 포스팅에서는 아스키코드와 유니코드에 대해서 알아보겠습니다.

2. 아스키코드(ASCII code)

아스키코드는 미국 표준 부호 체계입니다. 알파벳과 숫자, 특수 문자에 고유의 숫자를 부여한 것입니다.

 

7비트의 조합으로 이루어져 있어 총 128(2^7)개의 문자를 만들 수 있습니다. 아래는 아스키코드의 예시입니다.

아스키코드 문자 아스키코드 문자
1000001 A 1100001 a
1000010 B 1100010 b
1000011 C 1100011 c

아스키코드는 한글이나 중국어 등으로는 표현을 할 수 없습니다. 이런 어려움 때문에 만들어진 것이 유니코드입니다.

3. 유니코드(Unicode)

유니코드는 16비트(2바이트)를 사용하여 0x0000부터 0xFFFF까지 2^16에 모든 문자를 집어넣어, 세계 모든 언어의 문자와 그 밖의 기호에까지 코드값을 부여한 것입니다.

 

하지만 2^16개의 자리로도 부족해지자 0x0000부터 0xFFFF까지 문자를 배정해 놓은 세트를 총 17개로 늘리게 됩니다. 이 세트들을 유니코드에서는 '평면'이라고 부릅니다. 이 평면 중에서 현대에서 쓰이는 문자들을 모두 0번 평면에 몰아넣었는데 이 평면을 기본 다국어 평면(BMP, Basic Multilingual Plane)이라고 합니다.

 

유니코드에서는 모든 평면이 0x0000부터 0xFFFF의 값을 가지고 있기 때문에 겹치는 현상이 생길 수 있습니다. 예를 들어 0xB000은 0번 평면에서는 한글 "뀀"을 의미하지만 1번 평면에서는 다른 나라의 글자를 의미합니다. 이에 U+라는 기호에 평면 숫자를 붙이는 방식을 사용했습니다. 한글 "뀀"은 0번 평면이기 때문에 숫자를 붙이지 않고 U+B000로 표시합니다. 만약 1번 평면에 있는 글자를 표시하려면 U+1B000으로 표시하면 됩니다.

4. 인코딩은 뭐고 utf-8, utf-16은 뭐지?

유니코드에 문제점이 있습니다. 영어를 표기할 때는 1바이트, 한글을 표기할 때는 2바이트, 어느 나라는 3바이트로 표현을 했습니다. 이런 가변적인 표현에 문제가 있었습니다. 컴퓨터 입장에서는 어떨 때 몇 바이트를 표현해야 되는지 부담을 갖게 됩니다. 그렇기 때문에 다른 표시를 해주면서, 만약 이 표시가 있으면 1바이트로 표현해줘, 이런 표시가 있으면 2바이트로 표현해줘와 같이 약속을 하게 되고 약속대로 저장을 하게 되는데, 이를 인코딩이라고 합니다. 파일을 저장할 때 유니코드로만 저장을 하면 혼란을 줄 수 있기 때문에 유니코드 앞에 약속된 표기를 해주면서 저장을 하게 됐습니다. 그리고 인코딩의 종류는 하나가 아니고 utf-8이 있고 utf-16 등이 있습니다.

'HTML' 카테고리의 다른 글

HTML Entities  (0) 2020.07.20
WCAG (Web Content Accessibility Guidelines)  (0) 2020.07.20
HTML5 Markup  (0) 2020.07.14
<title></title> 작성 시 주의점  (0) 2020.07.13
HTML 접근성 (Accessibility)과 웹 표준  (0) 2020.07.13