본문 바로가기
코딩이야기/웹알아보기

문자 인코딩에 대해서 알아보자 - 3편 그외 많이 보는 인코딩

by GiraffeB 2018. 1. 10.
#자주 만날 수 있는 인코딩들(without 유니코드)


##1. ISO 8859-1 (latin1)

###1) 문자세트

ISO/IEC 8859이 일부인 문 집합으로 약칭 latin-1으로 불린다.
ASCII에 포함된 95자의 인쇄 영역은 현대 영어로 정보를 표현하는 데 충분하다. 하지만 로마문자를 쓰는 다른 언어에는 ASCII로 처리할 수 없는 추가적인 기호를 포함하고 있다. 예를 들면 독일어, 에스파냐어, 스웨덴어와 북유럽언어 등이다.

ISO/IEC 8859는 기존 8비트로 구성된 바이트의 8번째 비트를 이용하여 128자의 추가적인 문자를 할당하여 이 문제를 해결하고자 하는 목적으로 제안되었다. 그럼에도 불구하고 한 종류의 문자 집합만으로는 해결하고자 했던 문자들을 모두 처리할 수 없어 여러 가지 매핑이 개발되었다.

ISO 8859-n(ISO/IEC 8859의 여러 매핑을 의미) 인코딩들은 인쇄 가능한 문자만을 포함한다. 1바이트 공간에서 인쇄가능한 문자를 제외한 다른 공간들은 제어문자에 할당된다. ISO/IEC 646에 정의된 C0영역(0-31)과 ISO 6429에 정의된 C1영역(127-159)이 제어 문자 영역이다. (이 문자 집합 이름은 MIME 이름으로도 활용된다. - 이 문장의 의미는 잘 모르겠다.)

그래서 ISO 8859-1 (latin-1)은 가장 널리씌이며 대부분의 서유럽 언어를 지원하는 문자셋을 가진다.
HTML문서의 기본 인코딩이다.


### 2) 문자 인코딩 형태

7bit의 ASCII를 포함하고 그외에 확장된 형태로 1바이트씩 문자로 인코딩된다.
문자 인코딩 형태를 설명하려면, 결국 비트가 어떻게 정렬되는지 알려줘야 되는 것 같다.
이런 단순한 형태의 문자인코딩은 상관없지만, utf-8, 16같은 친구들은 공부를 좀 더 해서 설명해야한다.

아주 단순하게 정리하면 1바이트 단위씩 해석하면 됨 꿀.


### 3) 문자 인코딩 구조

1바이트씩 해석이라 크게 문자될게 없는 것 같다
빅, 리틀 엔디안은 Byte Order이지 비트오더가 아니기 때문에 큰 문제가 없다.


## 2. euc-kr


###1) 문자세트

EUC-KR은 KS X 1001와 KS X 1003을 사용하는 8비트(!) 문자 인코딩, EUC(Extended Unix Code)의 일종이며 대표적인 한글 완성형 인코딩이기 때문에 보통 완성형이라고 불린다.
KS X 1001은 옛 이름인 KS C 5601로도 알려져 있으며 1974년 처음 제정되었고, 2004년에 개정된 KS X 1001:2004가 최신 규격이다.

KS X 1001의 한글규격과 KS X 1003의 ASCII코드에 대응하는 영역을 할당해서 쓴다.


###2) 문자 인코딩 형태

(1) 128보다 작은 바이트에 KS X 1003을 배당한다.
(2) 128보다 크거나 작은 바이트에 KS X 1001을 배당한다. 각 글자는 행과 열에 128을 더한 코드 값을 사용하여 2바이트로 표현한다.

예를들어 KS X 1001의 42-27에 배당된 "위"라는 글자는 EUC-KR에서 C0 A7라는 바이트 열로 표현된다.

KS X 1001에는 "한글 채움 문자"를 사용하여 규격의 문자 집합에 포함되지 않은 한글을 표현하는 확장 방법이 있지만,
대부분의 경우 이 방법은 EUC-KR에서 사용되지 않고 대신 CP949와 같은 다른 방법을 사용하여 KS X 1001바깥의 한글을 표현한다.



## 3. ms949

### 1)문자세트

본래는 KS C 5601(KS X 1001)의 완성형 한글을 표현한 코드 페이지였으나, 윈도 95부터 확장 완성형 혹은 통합형 한글 코드(Unified Hangul Code)이라는 명칭으로 확장되어 현대의 모든 한글을 수용하게 되었다. 
마이크로소프트에서는 이 인코딩을 기반 문자 집합 이름인 "ks_c_5601-1987"로 사용하고 있다. 다만 이 코드 페이지는 IANA에 등록되어 있찌 않으므로 인터넷 상에서 정보를 주고 받는데 대한 표준은 아니다.
MS949 인코딩은 EUC-KR의 확장이며, 하위 호환성이 있다(!).


### 2)문자 인코딩 형태

(1) 128보다 작은 바이트에 KS X 1003을 배당한다.
(2) 128보다 크거나 같은 두 바이트에 KS X 1001을 배당한다. 각 글자는 행과 열에 128을 더한 코드값을 사용하여 2바이트로 표현된다. 행과 열 번호가 32부터 시작하기 때문에 실제로 이 문자 집합은 첫째/둘째 바이트가 161부터 254범위에 있다.
(3) 나머지 공간에 KS X 1001에 없는 8822자의 현대 한글을 가나다 순서대로 배당한다. 이 경우 첫째 바이트가 129부터 197까지이며, 둘째 바이트는 65부터 90까지(로마자 대문자), 97부터 122까지(로마자 소문자), 129부터 254까지의 범위이다. 단 첫째 바이트가 161이상일 경우 KS X 1001과의 충돌을 막기 위해 둘째 바이트는 161이상이 될 수 없다.
(4) 한글 채움 문자의 부호값은 A4D4이다.

예를들어, KS X 1001의 40-27에 배당된 "위"라는 글자는 CP949에서도 C0 A7라틑 바이트 열로 표현된다. 한편 KS X 1001에 없는 "갘"이라는 글자는 KS X 1001에 없는 현대 한글 중 10번재이고 따라서 MS 949에서 81 4A가 된다.