컴퓨터는 내부적으로 모두 숫자다. 고로 문자도 모두 숫자다. 문자를 숫자에 매칭시키는 여러 규약들이 존재하는데, 이제부터 자주 쓰이는 규약들을 살펴 보자.
아스키(ASCII, American Standard Code for Information Interchange)
아스키는 영어 알파벳과 기호들을 컴퓨터에서 표현하는 규약으로 총 128개의 문자를 1바이트를 이용하여 표현한다. 이름에서 알 수 있듯이 아스키는 영어만 지원한다. 영어권 사람들에겐 상관없겠지만 다른 언어권 사람들은 사용하기 불편하다. (아래의 사이트에서 아스키 테이블을 확인할 수 있다.)
ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal
ASCII Table ASCII stands for American Standard Code for Information Interchange. Computers can only understand numbers, so an ASCII code is the numerical representation of a character such as 'a' or '@' or an action of some sort. ASCII was developed a long
www.asciitable.com
이후 다른 언어권 사람들의 불편을 해소하기 위해 여러 확장된 버전의 아스키 혹은 새로운 규약들이 나오기 시작했다.
멀티바이트(Multibyte)
아스키는 1바이트 만을 사용하여 문자들을 표현하는 규약이었다. 하지만 1바이트만으로는 중국의 그 많은 한자들이나 한국어, 일본어 등등 많은 문자를 가진 언어들까지 표현할 수 없었다. 따라서 기존의 아스키로 표현할 수 있는 문자는 1바이트만을 사용하고, 그 외 문자들은 2바이트를 사용하여 표현하는 멀티바이트방식이 나오게 된다. 이러한 멀티바이트 방식으로 새로운 규약을 만들어서 여러 언어를 표현하기 시작했는데, 멀티바이트의 한계는 2바이트로 다른 나라의 언어를 표현하는 것까지는 가능하지만, 한 번에 한 언어만 표현가능하다는 것이다. 즉, 내가 일본어와 한국어를 동시에 표현해야하는 상황에서는 사용할 수 없다는것이다. 따라서 전 세계 모든 언어를 한번에 표현할 수 있는 표준이 필요했으니, 이것이 바로 유니코드이다.
유니코드(Unicode)
전 세계 모든 문자 및 특수문자, 이모티콘까지 사용할 수 있는 방식이다. 전 세계 모든 문자에 숫자를 매칭하기 위해선 17개에서 18개의 비트가 필요하다. 하지만 이것을 인코딩할 때, 적은 비트로도 표현할 수 있는 문자는 적은 비트로 표현하는 것이 효율적일 것이다. 따라서 유니코드에는 여러 가지 인코딩 방식이 존재한다. UTF-8, UTF-16, UTF-32 이러한 인코딩 방식이 존재하는데, 차이점은 "문자하나를 표현하기 위해 사용하는 최소 바이트가 몇 바이트인가"이다. UTF-8 같은 경우 1바이트로 표현할 수 있는 문자는 1바이트로 표현하다가 1바이트로 표현할 수 없는 문자가 나오면 그때부터 2바이트, 3바이트 늘려가며 표현하는 방식이다. 현재는 대부분 UTF-8 인코딩 방식을 사용하여 문자를 표현한다.