
1. 아스키 코드
아스키(ASCII)코드는 유니코드 이전에 사용된 문자 인코딩 방식으로 7비트로 최대 128개의 문자를 표현할 수 있다.
하지만 128개라는 한계 때문에 영어와 숫자, 일부 특수 문자 및 제어문자만 표현 가능했다.
그래서 여러 국가의 문자 체계를 통합하기 위해 탄생한 것이 유니코드이다.
1.1 아스키 코드의 패리티 비트
아스키 코드는 원래 7비트이지만 오류 검출을 위해 1비트를 추가하여 8비트로 확장하는 경우도 있다.
패리티 비트는 데이터 전송 중 오류를 감지하는 용도로 사용된다.
짝수 패리티 : 1의 개수를 짝수로 맞춤
홀수 패리티 : 1의 개수를 홀수로 맞춤
하지만 패리티 비트는 2비트 이상 오류를 감지하지 못하고, 오류 수정도 불가능하므로 이후 해밍 코드, CRC 같은 강력한 오류 검출 기법이 등장했다.
2. EUC-KR : 한글을 위한 인코딩 방식
EUC-KR은 한글을 표현하기 위해 아스키 코드를 확장한 인코딩 방식이다.
기존 1바이트(128비트)는 아스키 코드와 같고 2바이트는 한글을 표현하기 위해 사용된다.
하지만 이 방식은 완성형 인코딩 방식이라서 모든 한글을 표현할 수 없다. 예를 들면 뷁, 뛝 같은 글자를 표현할 수 없다.
2.1 한글을 전부 표현할 수 없는 이유
한글 조합은 초성(19), 중성(21), 종성(28)로 총 11,172자가 존재한다.
EUC-KR은 2바이트까지 사용할 수 있으므로 이론적으로는 65,536개의 문자를 표현할 수 있다.
하지만 EUC-KR은 한글만 저장하는 것이 아니라 특수문자, 한자, 기호 등도 포함해야해서 공간이 부족했다.
그래서 모든 한글을 담을 수 없었고, 2,350자만 골라서 저장한 것이라고 한다.
참고. 완성형 인코딩 방식과 조합형 인코딩 방식
완성형 인코딩 방식 : 초성, 중성, 종성을 합쳐서 하나의 코드를 부여하는 방식
조합형 인코딩 방식 : 초성, 중성, 종성을 분리하여 초성 하나에 코드를 부여하는 방식
3. 유니코드
유니코드는 전 세계의 모든 문자를 표현할 수 있는 문자 집합으로 정리한 표준이다.
각 문자마다 고유한 코드 포인트(Code Point) 를 부여하여 어떤 시스템에서도 동일한 문자를 사용할 수 있도록 한다.
하지만 유니코드 자체는 단순한 문자 집합일 뿐이며 실제로 문자를 저장하려면 인코딩 방식이 필요하다.
참고로 유니코드는 한글 완성형과 조합형 표현 방식 모두 지원하고, 현대 한글뿐만 아니라 옛한글까지도 표현 가능하다.
4. UTF-8: 유니코드의 대표적인 인코딩 방식
UTF-8은 유니코드를 저장하고 전송하는 가장 널리 쓰이는 인코딩 방식이다. 유니코드의 코드 포인트를 가변 길이(1~4바이트)로 변환하여 저장한다.
영어(ASCII 문자)는 1바이트이고, 한글과 한자는 3바이트이다.
5. 유니코드와 UTF-8
유니코드는 전 세계 문자에 고유한 번호를 부여한 문자 집합이다. 즉 단순한 매핑표에 불과하다.
이것을 파일에 저장하거나 전송할 때는 변환하는 방식이 필요한 데 이 방식 중 하나가 UTF-8이다.
6. 유니코드의 인코딩 방식 비교
유니코드 인코딩 방식은 다양하다. 그 중 대표적인 것은 UTF-8, UTF-16, UTF-32이다.
- UTF-8
- 문자마다 1~4 바이트 가변 길이 사용
- 영어(ASCII)문자는 1바이트로 저장되므로 공간 절약 가능
- 한글, 한자는 3바이트가 필요하다.
- UTF-16
- 대부분의 문자를 2바이트 또는 4바이트로 표현
- 한중일 문자 사용 시에는 2바이트로 저장되므로 공갼 절약이 가능하다.
- 하지만 영어만 사용하는 경우 2바이트를 차지하므로 낭비가 발생한다.
- UTF-32
- 모든 문자를 무조건 4바이트로 저장
- 고정 길이라서 처리 속도가 빠르다.
- 저장 공간을 많이 차지한다.
각 인코딩 방식의 장단점이 존재하지만 대부분 UTF-8을 많이 사용한다.
아무래도 아스키 코드로 표현하던 영어가 유니코드에서도 그대로 호환되기도 하고, 전반적인 IT 시스템이 영어권에서 만들어져서 그런 것 같다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!