아스키코드(ASCII Code)와 유니코드(Unicode)에 대하여
아스키 코드란?
아스키 코드(ASCII)는 American Standard Code for Information Interchange를 줄인 말이다. 이름 그대로 미국에서 정의한 정보 교환용 부호체계이다.
아스키 코드는 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 1바이트로 구성되어 있는 아스키 코드는 8비트(==1바이트) 중 7개의 비트만 사용한다. 나머지 1비트는 Parity Bit이라고 불리는 오류 체크를 위한 비트로 사용한다.
예를 들어 이진법으로 1000001이면서 십진법으로 65는 문자 'A'를 나타낸다. 이처럼 알파벳을 포함, 영문 키보드로 입력할 수 있는 모든 기호들이 아스키 코드로 할당되어 있다. 매우 단순하고 간단하여 많은 곳에서 사용되었다.
하지만, 아스키 코드는 7개의 비트만을 사용하므로 총 2^7 = 128개의 부호밖에 나타낼 수없다. 이를 보완하기 위해 8비트로 확장한 ANSI 코드가 나오기도 했다. 따라서 이 ANSI 코드는 2^8=256개의 부호를 나타낼 수 있었지만, 그럼에도 전 세계의 모든 문자를 나타내기에는 역부족이었다.
이러한 문제를 해결할 수 있는 방법이 바로 유니코드이다.
유니코드란?
유니코드는 전 세계의 문자를 일관되게 표현할 수 있도록 설계된 표준이다.
유니코드는 1바이트가 아닌 2바이트, 즉 16비트로 문자를 표현한다. 따라서 2^16=65536 개의 문자를 표현할 수 있다.
2진법으로는 0000 0000 0000 0000 ~ 1111 1111 1111 1111까지, 16진법으로는 0x0000 ~ 0 xFFFF까지 표현이 가능하다는 뜻이다.
이러한 유니코드는 0~127의 숫자는 ASCII와 동일한 의미를 갖는다. 예를 들어 10진법 65는 아스키 코드나 유니코드나 모두 'A'를 나타낸다.
한글 프로그램을 사용해 본 사람이라면 유니코드 문자표를 본 적이 있을 것이다. 이처럼 유니코드는 알파벳뿐만 아니라 다양한 언어, 기호, 이모티콘 등등 엄청나게 많은 문자들을 표현할 수 있다.
유니코드 문자는 해당 글자의 코드를 표기할 때 주로 U+(16진수 숫자)의 형태로 쓴다. 예를 들어 한글 '가'는 유니코드에서 16진수로 AC00(=10진수 44032)라는 코드 넘버를 가지는데, 이를 U+AC00으로 적는 식이다. ( 2진법이나 10진법으로 표현하면 너무 길 것 같지 않나라고 생각해본다)
유니코드는 초창기 2^16개의 문자를 표현할 수 있었지만, 이것마저 부족해지게 되자, Plane이라 불리는 17개의 영역이 각각 2^16개의 문자를 표현할 수 있도록 확장하였다.
Plane 영역은 10진법으로 0~16, 16진법으로 0x00~0x10까지 나뉘게 된다.
결국 유니코드는 U+(Plane번호)(16진수 숫자)로 표시되는데, 예를 들어 U+0AC00 이라는 코드의 유니코드가 있다면, 해당 기호는 0번 Plane 영역의 AC00 값을 의미한다. 이것은 '가'라는 한글 문자를 뜻한다. 참고로 0번 Plane은 생략이 가능하기 때문에 U+0AC00 은 U+AC00 으로 나타낸다.
이때 Plane번호가 다르면 같은 16진수 숫자라도 다른 기호를 나타낼 수 있다. 예를 들어 U+2AC00은 2번 Plane 영역의 AC00 값을 의미하는데, 이것은 '𪰀'라는 한자를 나타낸다.
이처럼 17개의 Plane이 모두 2^16개의 문자를 표현할 수 있기 때문에 17*2^16 = 17*65536 = 1,114,112 개의 문자를 표현할 수 있게 되었다.
#참고
Plane은 기본 문자가 들어있는 BMP(Basic Multillingual Plane), BMP에 없는 옛글자 등을 넣는 SMP
(Supplementary Multilingual Plane), 한자를 더 넣기 위해 별도로 정의한 SIP (Supplementary Ideographic Plane), 확장 한자 G 등이 포함되는 TIP (Tertiary Ideographic Plane), 앞의 영역에 포함되지 않는 기타 문자 등이 들어가는
SSP(Supplementary Special-purpose Plane), 자유 영역인 PUA (Private Use Area) 등이 정의되어 있다.
참고
1. https://ko.wikipedia.org/wiki/ASCII
2. https://www.ascii-code.com/
3. https://ko.wikipedia.org/wiki/유니코드
4. https://d2.naver.com/helloworld/19187
5. https://dingue.tistory.com/16
6. https://namu.wiki/w/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C
7. https://unicode-table.com/kr/search/?q=U%2B2AC00