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

문자 인코딩에 대해서 알아보자 - 1편 문자 인코딩 개념(수정)

by GiraffeB 2018. 1. 3.


 # 문자 인코딩(character encoding)
문자 인코딩은 크게 이렇게 3가지로 구성된다.

## 1. 문자 집합 또는 문자셋(chracter set, charset)

표현하고자 하는 언어의 문자들을 코드화 해놓은 것으로 볼 수 있다. 
"이런 언어의 문자들을 포함하고 있으며, 해당 문자들에 코드값을 부여했다" 고 보면 된다.

한글을 예로들면,
euc-kr에서 사용된 문자집합이 몇몇 한글을 지원하지 않았고, 해당 문자 인코딩으로 이루어진 시스템에서 사용자가 본인의 이름을 사용하지 못했다는 기사를 본적이 있다.

아래 표와 같이 표현된다.
유니코드를 나타내는 U+ AC00은 "가"를 나타낸다.




## 2. 문자 인코딩 형태(character encoding form, CEF)
컴퓨터 상에서 실제로 저장되는 코드값으로 볼 수 있다. 유니코드를 예를 들면 우리가 자주 접할 수 있는 UTF-8가 있다. 
헷갈렸던 부분은 위의 유니코드 값을 컴퓨터에서 문자를 저장할 때 쓰지않고 변환해서 사용한다는 점이다. 

UTF-8을 예로 들면 기존 문자 인코딩에 크게 문제가 없었기에 ASCII등의 레거시 시스템등의 호환성을 위해서 고안되었다. 유니코드 계열에서도 "문자 인코딩 형태"는 여러개 존재하고 각각 특정 목적이나 제안을 달성하기 위해서 만들어졌다고 보면 될 것 같다.

UTF-8의 경우 기존 알파벳은 1바이트로 그대로 표현이 가능하기 때문에 2바이트로 표현하고자 했던 다른 문자 인코딩에 비해서 호환성과 용량에서 장점이 있다.






##3. 문자 인코딩 구조(character encoding scheme, CES)
문자 인코딩 형태로 변환된 코드 값을 옥텟 기반의 시스템에서 사용하기 위하여 옥텟들로 변환하는 방법이다.
"대부분의 문자 인코딩 형태는 이 과정에서 아무런 일도 일어나지 않으며" - 이유는 대부분의 시스템이 이미 8비트 단위 = 옥텟 = 바이트 형태로 구조화 되어 있기 때문인 것 같다. - , 8비트 이상의 숫자를 사용하는 UTF-16과 같은 문자 인코딩 형태의 경우 엔디안을 지정해 주는 것으로 충분하다. 즉, 어차피 바이트 단위로 작성되어 있으니, 바이트를 읽는 순서만 알려주면 된다.
여기에는 ISO 2022와 같은 복합 인코딩이나, SCSU와 같은 압축 방법 등이 속한다.

Q. 인코딩후 나온 최종 결과물을 의미하는가? 
그렇다. 어차피 옥텟 = 바이트 단위로 되어있다.

+같이 읽기
옥텟(octet)은 컴퓨팅에서 8개의 비트가 한데 모인 것을 말한다. 초기 컴퓨터들은 1바이트가 꼭 8비트만을 의미 하지 않았으므로, 8비트를 명확하게 정의하기 위해 옥텟이라는 용어가 필요 했던 것이다. 그러나 요즘에는 바이트하고 같은 의미가 되었다.
워드(word)는 하나의 기계어 명령어나 연산을 통해 저장된 장치로부터 레지스터에 옮겨 놓을 수 있는 데이터 단위이다. 메모리에서 레지스터로 데이터를 옮기거나 할 때, 하나의 명령어로 실행될 수 있는 데이터 처리 단위이다. 흔히 사용하는 32비트 CPU(ARM등)라면 워드는 32비트가 된다.



##4. 문자 인코딩 관련 용어들
코드 페이지(code page) 
- 특정한 문자 인코딩 테이블을 위해 쓰이는 전통적인 IBM용어이다. 문자 인코딩 테이블은 0부터 255까지의 정수를 표현하는 '단일 옥텟'이라고 불리는 일련의 비트들이 특정한 문자와 결합하여 도표화(mapping)한 것이다.
IBM과 마이크로 소프트는 코드 페이지를 문자열 집합에 자주 할당한다.
위의 분류로 보면 CEF(character encodig form)에 해당하겠다.

SCSU(Standard Compression Scheme for Unicode) 
- CES에 해당한다는데 작동 개념은 아직 모르겠다.


다음에는 코딩하면서 자주 만나는 인코딩들(cp949, utf-8, utf-16)들을 위의 관점에서 나눠서 보자.




참조:

https://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%ED%8E%98%EC%9D%B4%EC%A7%80 위키피디아 코드페이지
https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C 위키피디아 유니코드
http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP949.TXT cp949 유니코드 맵핑

http://dev.epiloum.net/164 ASCII
http://dev.epiloum.net/195 EUC-KR
http://dev.epiloum.net/293 CP949
http://dev.epiloum.net/231 유니코드
http://dev.epiloum.net/445 UCS-2와 html number entity number
http://dev.epiloum.net/487 utf-32 UCS4
http://dev.epiloum.net/595 utf-16
http://dev.epiloum.net/648 utf-8

http://ssaemo.tistory.com/28 인코딩들 개념 정리
http://umbum.tistory.com/328 인코딩들 개념 정리
http://studyforus.tistory.com/167 인코딩간 관계

http://d2.naver.com/helloworld/19187 네이버 기술 블로그 - 한글 인코딩 1편
http://d2.naver.com/helloworld/76650 네이버 기술 블로그 - 한글 인코딩 2편