인코딩
인코딩이라는 개념이 있다. 인코딩은 무언가를 코드로 만드는 것이다. 반대로 디코딩은 코드를 원래 형태로 되돌리는 것이다.
컴퓨터는 기본적으로 모든 것을 숫자로 다룬다. '컴퓨터'라는 단어 자체가 '계산하다'라는 의미의 'compute'에서 왔으며, 본질적으로 계산기이다. 과거에는 '전산'이라는 표현을 많이 썼는데, 이는 '전기 계산'의 줄임말이다.
컴퓨터가 계산을 하려면 모든 것을 숫자로 바꿔야 한다. 따라서 글자도 모두 숫자로 표현한다. 예를 들어, 알파벳 대문자 A는 65, B는 66으로 표현할 수 있다.
그러나 이러한 번호 붙이는 방식은 임의로 정할 수 있다. A를 꼭 65로 표현할 필요는 없으며, 30으로 표현해도 무방하다. 이처럼 문자를 숫자로 표현하는 방식, 즉 인코딩 방식은 여러 가지가 있을 수 있다.
ASCII
ASCII(American Standard Code for Information Interchange)는 가장 대표적인 문자 인코딩 방식이다. ASCII라는 이름에서 'A'가 붙은 것을 보면 알 수 있듯이, 이는 미국에서 만든 것이다.
미국인들은 알파벳 26글자(대문자 26개, 소문자 26개로 총 52개), 숫자, 문장부호, 그리고 키보드에 있는 기본적인 기호들만 있으면 충분했다. 따라서 많은 수의 문자를 표현할 필요가 없었다.
그래서 ASCII는 7비트 인코딩을 사용한다. 7비트는 2의 7승, 즉 128을 의미한다. 따라서 ASCII는 총 128개의 문자에 번호를 붙여 표현한다.
이렇게 ASCII는 128개의 문자만을 표현할 수 있는 간단한 인코딩 방식이다.
ISO8859
ASCII 인코딩이 미국에서 만들어진 후, 유럽에서는 문제가 생겼다. 유럽 언어들은 알파벳 위에 발음 기호 등을 붙이는 경우가 많은데, ASCII로는 이를 표현할 수 없었다.
이 문제를 해결하기 위해 ISO8859라는 8비트 확장 표준이 만들어졌다. 이는 기존 ASCII의 128개 문자를 2배로 늘려 256개의 문자를 표현할 수 있게 했다.
하지만 세계의 언어는 너무나 다양해서 256개의 문자로도 부족했다. 그래서 ISO8859-1, ISO8859-2, ISO8859-3 등으로 지역별로 다른 표준을 만들었다. 예를 들어, ISO8859-1은 서유럽 언어를, ISO8859-2는 동유럽 언어를 위한 것이었다.
그러나 이런 8비트 표준으로도 한국어와 같은 동아시아 언어를 표현하기에는 턱없이 부족했다. 한국에서 미국 컴퓨터를 수입해 사용하려고 했을 때, 8비트 인코딩으로는 한글을 표현할 수 없었던 것이다.
완성형
한글도 기 본적으로는 자음과 모음 조합인 28글자밖에 없다. 세종대왕이 창제한 한글은 단순하고 적은 수의 글자로 이루어져 있다.
하지만 실제로 한글을 표현할 때는 문제가 발생한다. 예를 들어, '오늘 날이 밝네'라는 문장에서 '밝'이라는 글자 하나만 해도 'ㅂ', 'ㅏ', 'ㄺ'의 세 요소를 포함하고 있다. 이렇게 하나의 글자가 여러 요소를 포함하게 되면, 컴퓨터에서 표현하기 위해 필요한 글자 수가 급격히 늘어난다.
이 문제를 해결하기 위해 한국에서는 여러 가지 방법을 시도했다. 그 중 하나가 '완성형' 방식이다. 이는 자주 사용되는 한글 글자 조합 2,350개만을 선별하여 사용하는 방식이다.
이 완성형 방식은 1987년경에 표준으로 채택되었다. 하지만 이는 장기적인 관점에서 볼 때 충분하지 않았다. 당시 이 표준을 만든 사람들이 미래를 충분히 예측하지 못했던 것이다.
확장완성형(CP949)
완성형 방식을 사용해 보니 자주 사용되지는 않지만, 완전히 사용되지 않는 것도 아닌 글자들이 있었다. 이로 인해 문제가 발생했다.
정부의 대응이 지지부진하자 마이크로소프트사에서 독자적으로 '확장 완성형'을 만들었다. 이는 CP949라고도 불리는데, 'Code Page 949'의 약자이다. 마이크로소프트는 DOS와 Windows 운영체제를 만들었기 때문에, 자신들이 만든 표준을 강제할 수 있었다.
원래 EUC-KR이라는 것이 있었는데, 이는 원래의 완성형을 가리킨다. 하지만 현재는 완성형을 거의 사용하지 않기 때문에, EUC-KR은 CP949와 동의어로 사용된다.
EUC-KR과 CP949는 모두 ASCII와 호환된다. 따라서 영어 텍스트는 인코딩 방식이 달라도 깨지지 않는다. 예를 들어, CP949로 인코딩된 텍스트를 ISO-8859로 잘못 해석해도 한글은 깨지지만 영어 알파벳은 정상적으로 표시된다.
유니코드
이 문제는 한국만의 문제가 아니었다. 전 세계 여러 나라들이 같은 문제로 어려움을 겪고 있었다. 특히 중국의 경우, 5개의 서로 다른 표준이 존재했다. 대만에서 만든 표준, 중국 본토에서 만든 여러 표준들이 있었고, 이로 인해 텍스트 파일을 주고받을 때 글자가 자주 깨지는 등의 불편함이 있었다.
이러한 문제를 해결하기 위해 유니코드(Unicode)가 만들어졌다. 유니코드는 '하나의(Uni)' '코드 체계(Code)'라는 의미로, 전 세계가 하나의 글자 번호 체계를 통일해서 사용하자는 취지로 만들어졌다.
2022년 기준 최신 유니코드 표준에는 14만 9천 개의 글자가 포함되어 있다. 이는 한자, 한글, 알파벳뿐만 아니라 고대 문자까지 포함하는 방대한 양이다. 예를 들어, 현재는 사용되지 않는 거란 문자도 포함되어 있다.
유니코드는 인류 역사상 존재했던 모든 문자를 포함하려고 노력한다. 이는 현재 사용되지 않는 문자라도 역사적, 학술적 가치가 있다고 판단되면 포함시킨다는 의미이다.
이모지
유니코드에는 매우 다양하 고 특이한 문자들이 포함되어 있다. 그 중에는 일본의 이모지(emoji)도 포함되어 있다.
일본은 독특한 기술 발전 방식으로 유명한데, 이모지도 그 중 하나이다. 일본 통신사들은 문자 메시지를 주고받을 때 이모지를 사용했다. 현재의 이모티콘과 비슷하지만, 당시에는 그림을 보내면 통신 요금이 많이 나왔기 때문에 다른 방식을 고안했다.
일본 통신사들은 문자 코드표의 빈 칸에 이모지를 넣었다. 이렇게 하면 이모지 하나를 글자 하나로 대체해서 보낼 수 있어, 용량을 절약할 수 있었다. 유니코드를 만들 때, 일본 통신회사 대표가 와서 이 이모지들도 글자로 인정해 유니코드에 포함시켜 달라고 요청했다.
UTF-8
그 다음에는 유니코드라는 체계를 현재 사용하고 있는데, 유니코드는 14만 자가 넘는다. 글자를 하나 표기할 때마다 최소한 4바이트를 사용한다. 이것은 ASCII와 호환이 안되기 때문에 UTF-8이라는 표기법이 나왔다.
UTF-8은 유니코드를 ASCII에 호환시키기 위해 만든 표기법으로, 같은 글자도 1바이트일 때도 있고 4바이트일 때도 있는 가변적 방법이다. 영어 알파벳은 1바이트만 차지해서 ASCII와 호환이 된다. 한글 같은 경우는 3바이트를 사용한다.
정리를 하자면은 결국 컴퓨터에서 한국어는 UTF-8 아니면 CP-949로 표현한다. 만약 한글이 포함된 텍스트 파일을 열었는데 깨져 보이면, 인코딩이 잘못된 것이다.
인코딩을 설정하지 않으면 윈도에서는 CP-949가 기본으로 시도한다. 따라서, UTF-8로 다시 시도해보면 된다. 맥과 리눅스는 반대이다.