컴퓨터는 텍스트를 처리할 때 문자 집합(Character Set)과 문자 인코딩/디코딩(Character Encoding/Decoding)이라는 두 가지 개념을 사용합니다.
이번 포스트에서는 두 개념에 대해 알아보겠습니다.
사람이 사용하는 문자를 컴퓨터가 이해하는 기호로 표현하기 위해 문자를 각 코드(숫자)에 매칭 시킨 것
아스키 코드는 초창기 문자 집합 중 하나로 영어 알파벳과 아라비아 숫자, 일부 특수 문자를 포함합니다.
아스키 문자들은 각각 7비트로 표현되는데 7비트는 최대 개(128)개의 정보의 가짓수를 표현할 수 있습니다.
실제로는 8비트를 사용하지만 아스키 코드의 1비트는 오류 검출을 위한 패리티 비트(parity bit) 이기 때문에 실질적으로 7비트를 사용합니다.
아스키 코드표를 참조하면 아스키 문자들은 0부터 127까지의 총 128개의 숫자 중 하나의 고유한 수에 일대일로 대응되고 아스키 문자에 대응된 고유한 수를 아스키 코드라고 합니다.
문자 인코딩에서 '글자에 부여된 고유한 값'을 코드 포인트(Code Point)라고 한다 가령 아스키 문자 "A"의 코드 포인트는 65입니다.
아스키 코드의 장점은 매우 간단하게 인코딩 된다는 것이지만 단점 또한 존재하는데요
한글 표현 불가, 128개보다 많은 문자 표현 불가
나중에 8비트의 확장 아스키 코드(Extended ASCII)가 나오기 했지만 그래봤자 256개의 숫자는 여전히 표현 범위는 부족합니다.
모든 나라가 각각의 인코딩 방식을 가지고 있다면 다국어로 된 사이트를 구성할 때 각 나라의 인코딩을 모두 알아야하기 때문에
각 나라들의 문자 집합과 인코딩 방식의 통일이 대두되었습니다.
그래서 등장한 것이 유니코드(Unicode) 입니다.
EUC-KR보다 훨씬 더 다양한 한글 포함, 대부분 나라의 문자, 특수문자, 화살표, 이모티콘까지도 코드로 표현 가능하며, 가장 많이 사용되는 표준 문자 집합이며
UTF-8 이외에 UTF-16 , UTF-32 등이 존재합니다.
가장 대중적인 UTF-8 기준으로 통상적으로 1바이트에서 4바이트까지의 인코딩 결과 생성합니다.
한글은 알파벳과 다르게 문자가 초성, 중성, 종성으로 이루어 진 특수성이 있습니다.
그래서 완성형(한글 완성형 인코딩)과 조합형(한글 조합형 인코딩)이 존재하는데요.
완성형 인코딩은 초성, 중성 종성으로 이루어진 하나의 글자에 고유한 코드를 부여하는 인코딩 방식이고
조합형 인코딩은 각각의 비트열을 초성, 중성, 종성에 따로 할당하여 그것의 조합으로 하나의 글자 코드를 완성하는 방식입니다.
EUC-KR은 대표적인 완성형 인코딩 방식이며, 초성, 중성, 종성이 결합된 한글 단어에 2바이트의 코드가 부여됩니다.
한글 한 글자에 2바이트의 코드 - > EUC-KR 인코딩 한글 한 글자는 16비트 필요 - > 16비트를 네 자리 16진수로 표현 - > EUC-KR 한글은 네 자리 십육진수로 나타낼 수 있음.
이 방식으로 2,350개 정도의 한글 단어 표현이 가능하지만, '쀍', '쀓', '믜'와 같은 단어는 표현이 불가능 합니다.
이러한 문제 해결을 위해 MS의 CP949 (Code Page 949) 가 등장했고 이는 EUC-KR의 확장 버전으로 더 많은 표현이 가능했지만 여전히 부족한 상황입니다.
문자 집합을 컴퓨터가 이해할 수 있는 0과 1의 이진 데이터로 변환하는 방법(반대도 가능)을 의미합니다.
예를 들어, ASCII 문자 집합은 7비트 이진 데이터로 인코딩되지만, Unicode 문자 집합은 다양한 길이의 비트를 사용하여 인코딩됩니다.
문자 인코딩 방식으로는 UTF-8, UTF-16, UTF-32, ISO-8859-1, EUC-KR 등이 있습니다. 이러한 인코딩 방식은 특정 문자 집합을 효율적이고 안정적으로 표현할 수 있도록 지원합니다.
문자 집합과 문자 인코딩은 서로 다른 개념이지만, 종종 혼용해서 사용되는 경우가 있으므로 주의해야 합니다.