한번쯤 웹사이트를 돌아다니면서 꿻뷁헬
이런 단어들을 보았을 것이다. 그렇다면 이런 단어들은 왜 나타나는 것일까?
잘은 모르겠지만 인코딩 문제라는데.. UTF8
,UTF16
,아스키코드
,EUCKR
은 무엇이며 "아 이렇게 하니 해결이 되네?" 하고 넘어갔던 부분들을 명쾌하게 풀고자 한다.
위와 같은 UTF8
,UTF16
,아스키코드
,EUCKR
개념을 알려면 두가지의 개념을 알아야 한다.
이 두가지 개념을 알고 있으면 이러한 용어들을 명확하게 정리할 수 있다.
문자표는 영어로
Character Set
이라고 하며, 문자와 숫자를 일대일 매칭 시킨 표를 문자표라고 한다.
문자표를 알아보기전에 문자표가 나오게 된 배경에 대해 먼저 알아봐야 한다.
우리 컴퓨터가 처음 등장했을 때는 어떤 문자열을 표헌하는 용도 보다는 수학적인 계산을 하는 용도로 쓰이게 되었다. 근데 수학적인 계산을 하고 나서도 그 결과를 사람이 볼수있는 형태로 나타 내야하는데, 결국엔 그 나타내야하는 기계도 하나의 컴퓨터이다.
그 컴퓨터는 우리가 말하는 가나다
를 못 알아 듣는다. 그렇기 때문에
"
가
는1
이야, 그러니 1이라는 숫자가 들어오면가
라고 표현을 해줘
"나
는2
이야" 그러니 2이라는 숫자가 들어오면나
라고 표현을 해줘
"다
는3
이야" 그러니 3이라는 숫자가 들어오면다
라고 표현을 해줘
라는 식으로 기계의 다 입력을 해 놓았다. 그렇지만 그러다보니 문제점이 생기기 시작했는데,
어떤 기기는 1
을 가
라고 생각하고, 어떤 기기는 3
을 가
라고 생각하고 이러다 보니 뭔가 맞지가 앉으니 약속을 정하기 시작했다. 하나의 숫자와 하나의 문자를 매칭 시키는 것을 우리는 문자표라고 부르고 이 문자표의 대표적인 표가 아스키 코드표라는 것이다.
이러한 필요에 의해서 아스키 코드표가 등장하게 된다.
그런데 아스키 코드표에도 문제가 있었다.
아스키 코드표에 a
는 America를 뜻한다. 아스키 코드표에는 용어밖에 없다. 미국 사람들, 영어권 사람들을 위한 문자표이다. 그러다보니 영어를 제외한 다른 언어권에서 컴퓨터를 사용하게되면 그것을 다 영어로만 표현하면 안되니까 한글로 표현하기 위한 문자표도 필요하게 되었다.
그런데 또 그 문자표를 만드는데 문제가 생긴다.
아스키 코드표를 만들때 그렇게 컴퓨터 엔지니어가 많지 않았고, 주로 영어권 사람들이 사용했기 대문에 빨리 표준을 만들어서 배포하고 따르면 됐을텐데, 다양한 나라들의 문자표를 만들 시점은 이미 컴퓨터 엔지니어가 굉장히 많고 문자표를 만들고자 하는 기준과 방법들이 너무 다양했다. 그렇기 때문에
어떤 엔지니어는 A방법, 어떤 엔지니어는 B방법 등등 표준들이 너무 많게 되어버렸다.
그렇다보니 컴퓨터의 입장에서는 어디에서는 1
이 가
고, 3
이 가
이게 되버리는 이러한 상황이 생기게 되었고, 이러한 이유 때문에 처음에 이야기했던 꿻뷁헬
이런 단어들이 보이게 되는 것이다.
그래서 이러한 문제를 해결하기위해 하나의 코드표로 만들어서 모든 세계의 문자를 다 하나의 표로 표현하게끔 만든 것이 유니 코드이다.
앞에서 아스키 코드표와 유니 코드에 대해서 알아보았고, 마지막으로 이야기 했던 유니 코드에도 문제점이 있었다.
유니코드가 영어를 표현할 때는 1Byte
로, 한글을 표현할 때는 2Byte
, 다른 나라의 언어를 표현할 때는 3Byte
로 표현하게되는 가변적인 표현의 문제가 있었다.
이게 컴퓨터의 입장에서는 굉장히 큰 혼란을 주게 되는데, 그래서 이때 나온 해결법이 1Byte
일때는 1Byte
앞에 어떤 표시를 하게 된다. 이 표시가 있을때는 1Byte
만 읽고, 또 다른 표시가 있으면 2Byte
읽고, 또 다른 표시가 나오면 3Byte
로 읽는 약속을 하게 되고, 그 약속대로 저장하게 되는데 그것이 바로 인코딩이다.
쉽게 이야기해서 파일로 저장할 때 단순히 유니코드로만 저장하면 혼란을 주게 되니 유니코드 앞에 어떤 표를 달아서 저장하는 것을 인코딩이라고 생각하면 된다.
이러한 이코딩 방법들이 하나가 아니고 UTF8
,UTF16
등이 있다.