���� ������ �߰����� ����� �����. ������ �� ������ ��� �� ������������ ������ ����. ���ϱ� �� ������� ��� �������� ����� ����������.
한글이 위와 같이 깨져서 나오는 문제를 마주한 적이 있을 것이다.
컴퓨터는 기본적으로 정보들을 0
과 1
을 이용해 저장한다. 하지만 사람들이 0
과 1
로 정보를 읽고 쓰면 매우 불편할 것이다.
그래서 우리가 사용하는 문자들에 대해서 각각에 대응하는 숫자를 매긴다.
위의 숫자들은 다시 0
과 1
로 나타낼수 있다. 이와같이 사용되는 모든 글자들에 각각 숫자를 정해서 매긴 문자열 셋을 만든다.
사람이 문자를 입력하면 컴퓨터는 문자를 바이너리 숫자로 저장하고, 다시 사람에게 보여줄 때는 문자열 셋을 보고 해당하는 글자를 찾아서 텍스트를 보여준다.
이처럼 사람의 문자를 컴퓨터가 알아볼 수 있도록 바이너리 신호로 바꿔주는 걸 문자 인코딩 이라고한다.
위키 백과에 '문자 인코딩'을 검색해보면 위 사진과 같이 종류가 상당히 많은 것을 알 수 있다. 글자 깨짐 문제가 발생하는 이유는 문자열 셋이 통일이 안돼있기 때문이다.
ASCII는 초창기에 미국에서 만들어진 문자열 셋 이다. 하지만 ASCII에는 미국에서 사용하는 알파벳, 숫자 등만 들어있기 때문에 한글이나 한자 등의 다른 문자체계와 확장자 등을 표현할 수 없다. 그래서 나라마다 문자열 셋이 만들어졌다.
문제는 같은 나라 안에서도 문자열 셋 통일이 안됐다는 것이다. 한글을 보면 완성형과 조합형 등 여러가지 문자열 셋이 있다. 문자열 셋과 인코딩 방식을 서로 맞추지 않으면 글자들이 깨지는 일이 발생한다.
외국어 교육자료처럼 한 문서안에 여러 국가 문자들이 들어가는 경우 어떻게 할 방법이 없었다.
결국, 전세계 모든 문자들을 가지고 문자열 셋을 만들었고 유니코드라고 한다. 유니코드를 사용하면 한글, 태국 문자, 심지어 이모티콘도 나타낼 수 있다.
이걸 UTF-8 등으로 인코딩해서 사용하는 것이다.
유니코드는 문자열 셋이다. 각 문자마다 숫자를 정해놓은 것이다.
UTF-8은 이것을 인코딩하는 방식이다.
예를들어 A를 1000001(65)라고 했을때 컴퓨터에 각 문자마다 0
과 1
을 저장할 자리 수를 얼마나 할당하느냐에 따라 1000001
(7비트)로 사용할 수도 있고, 01000001
(8비트, 1바이트)로 사용할 수도 있다. 그런데 이렇게 하면 표현할 수 있는 글자 수에 한계가 있으니 앞에 0을 더 채워넣어서 00000000 01000001
2바이트씩 통일해서 할당할 수도 있다.
유니코드를 인코딩하는 다양한 방식이 있는데, 문자마다 적절한 바이트 수를 차지하도록 해서 다른 방식들보다 일반적으로 적은 용량만 쓰면서도 호환 문제도 가장 덜 발생하는 UTF-8이 전세계적으로 가장 널리 사용된다.