들어가기 전에 아스키 코드와 유니코드에 대해 간단히 알아보는 것이 좋을 것 같다
아스키(ASCII) 코드 vs 유니 코드(Unicode)
- 1960년대 미국에서 정의한 표준화한 부호체계
- 아스키코드는 7비트, 128개의 고유한 값만 사용
- 1byte는 8bit인데 7bit만 사용하는 이유는 통신 에러 검출을 위해 1bit(Parity bit)를 사용하기 때문
- 영문 키보드로 입력할 수 있는 모든 가능성을 담았으나
- 다른 언어를 표현하기에는 7bit로는 부족했다
- 8bit로 확장한 아스키코드(ANSI 코드)가 나왔다 -> 256개까지 표현 가능
- 그러나 한국, 중국, 일본 등 문자가 많으 국가에선 여전히 제한적이다
- 우리나라의 경우 KSC5601 표준이라는 고유한 인코딩 방법으로 문자를 표현
- 그래서 유니코드(Unicode)라는 전 세계 언어의 문자를 정의하기 위한 국제 표준 코드가 등장
유니코드(Unicode)
- 용량을 크게 확장한 2byte(2의 16승 = 65,536)의 유니코드가 등장
- 고어, 토속어 등 모든 문자를 담으려다보니 이 마저도 부족해서,
- 상위대행(1024자), 하위대행(1024자)로 할당한 뒤 이 둘의 조합으로(1024 * 1024 = 1,048,576) 약 백만자가 넘는 문자를 추가로 정의할 수 있게 됨
- 유니코드에는 총 110만개가 넘는 코드를 지정할 수 있는데 17개 구역으로 나누었다
- 110만 / 65,536 ~= 16.78 => 17개 구역
- 유니코드를 8비트 숫자 집합으로 나타내는 UTF-8이나 16비트 숫자 집합으로 나타내는 UTF-16 등이 문자인코딩 형태로 쓰인다
UTF-8

HTML 파일을 만들 때 ! + tab
(Emmet)으로 자동완성되는 템플릿에서 자주봤었던
UTF-8에 대해 공부해보자
위키백과의 정의를 보면
UTF-8은 유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나이다.
- 문자 인코딩 : 문자나 기호들을 컴퓨터가 이용할 수 있는 신호로 만드는 것
- Lookup table 같은 것을 약속으로 정해서 한글이나 기호 같은 문자를 변환하는 것 같다
- Universal Coded Character Set + Transformation Format - 8 bit 의 약자
- 본래는 FSS-UTF(File System Safe UCS/Unicode Transformation Format)이라는 이름으로 제안 되었다
UTF-8 인코딩
은 유니코드 한 문자를 나타내기 위해 1바이트에서 4바이트까지를 사용한다
- ASCII문자들은 1바이트만으로 표시
- 4바이트로 표현되는 문자는 기본 다국어 평면 바깥의 유니코드 문자, 거의 사용되지 않음
- UTF-8이나 UTF-16 압축 알고리즘을 사용하면 바이트는 무시할 수 있을 정도이다
자바는 내부적으로 문자열을 UTF-16인코딩으로 저장, 문자열 직렬화를 위하여 UTF-8을 변형하여 사용 - 변형된 UTF-8
장점과 단점
Javascript encodeURIComponent()
- 전역객체의 빌트인 메서드
- UTF-8로 인코딩함
- e.g., '가' -> '%EA%B0%80'
- decodeURIComponent() : 매개변수로 전달된 URI구성요소를 디코딩함
고찰
- 평소에 무심결에 넘겼던 UTF-8이 뭔지 알아보았다
- 사실 자바스크립트 딥다이브 스터디 중 21장에서 빌트인메서드 중에 encodeURIComponent가 나왔는데
- 이것에 대해 이야기하다보니 UTF-8이 뭔지 궁금해졌고 그것을 찾아보는 시간을 가졌다
- 나머지 meta 태그에 있는 것들을 모두 조사하는 것은 언제올지 모르는 다음으로 미루도록 하자
참고