한글
컴퓨터가 문자를 저장하는 방식에 대해 먼저 알아야한다
컴퓨터는 0,1 밖에 모름
- 문자를 저장하려면 문자 <-> 숫자 매핑 규칙 필요
- 이런 규칙을 인코딩 이라고 한다
ASCII
ascii는 American Standard Code for Information Interchange의 약자이다.
- 대충 미국에서 만든 표준 머시꺵이라는 거임.
초창기 컴퓨터는 영문 알파벳(대소문자)와 숫자 그리고 몇가지 특수문자면 충분했음
아스키는 이러한 문자들을 저장하기 위해 7bit를 사용하여 총 128개의 문자를 표현한다.
A는 65, a는 97 등등 ascii-code 를 가면 확인할 수 있다
하지만 컴퓨타가 전 세계로 보급화되면서 여러 나라의 언어를 다 담기엔 7bit 는 택도 없어짐
EUC-KR
영어는 1바이트로 충분하지만 한글은 자음과 모음의 조합을 생각하면 조합의 수가 상당하다
그래서 2byte 를 사용하여 한글을 표현하기 시작함, 이때 등장한 것이 EUC-KR
EUC는 Extend unix code 의 약자로 영어를 제외한 문들을 위한 확장판이다 (euc-kr 말고도 euc-jp, euc-cn도 있음)
euc-kr의 한글부는 KSC5601 를 기반으로 한다
KSC5601 (KS X 1001)
한글 완성형 표준으로
한 글자에 한 코드로 지정하는 방식이다.
- 가, 각, 간 각각 따로 코드를 부여함
당시 ISO-2022 규칙을 준수하기 위해 자주 쓰는 글자만 선별하여 구성하게 되었음
그래서 모든 한글을 표현하지 못한다는 문제가 존재.(한글 2350자만 포함됨)
CP949
이러한 완성형이지만 전체 한글조합이 다 안들어가 있는 문제를 해결한 것이 CP949이다 마이크로소프트에서 개발하여서 MS949, windows-949 라고도 함
UTF-8
UTF-8을 알기전에 Unicode에 대해 알아야 한다
- 유니코드는 전세계 모든 문자를 다룰 수 있도록 설계된 산업 표준이다
- A -> U+0041, 가 -> U+AC00 이렇게 약속을 한거임
유니코드는 문자 -> 번호(코드)에 대한 규칙만 정한 것
이 유니코드의 번호(코드)를 어떻게 컴퓨터에 저장하는지(인코딩), 여러가지가 있는데 이중 가장 많이 사용되는 것이 UTF-8 방식이다
utf-8은 켄 톰슨과 롭파이크(Go 개발자)가 만들음
utf-8의 특징으로는
- ASCII 완전 호환
- 영문, 숫자, 기호는 ASCII에서 사용하던 1바이트 체계를 그대로 사용하여 호환성을 보장함
- 가변 인코딩
- UTF-8은 첫 바이트의 비트 패턴을 통해 전체 길이를 본다.
- 이후 바이트는 항상
10xxxxxx형태를 지님
- 이후 바이트는 항상
- UTF-8은 첫 바이트의 비트 패턴을 통해 전체 길이를 본다.
0xxxxxxx → 1바이트 (ASCII)
110xxxxx 10xxxxxx → 2바이트
1110xxxx 10xxxxxx 10xxxxxx → 3바이트
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx → 4바이트만약 첫번쨰 바이트가 110이면 2바이트 문자로 10으로 시작하는 바이트 한개를 추가로 읽음
예: 힌디어 문자 "अ"
- UTF-8 표현: 11100000 10100100 10000101 (3바이트)
- 첫 바이트(11100000) → 3바이트 문자임을 나타냄
- 세 바이트의 유효 비트 조합 → 00001001 00000101 = 16진수 0x0905
- 코드포인트 U+0905는 데바나가리 문자 "अ"를 의미함