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

문자 인코딩 정리

by GiraffeB 2019. 9. 21.

1. 문자 인코딩의 구성 요소

1. 들어가며

간략하게 논리적으로 정리만 가능하고 상대방에게 설명할 수 있을 정도로만 합시다.

문자인코딩은 3가지 구성요소로 나눌 수 있다.

  1. 문자 집합
  2. 문자 인코딩 형태
  3. 문자 인코딩 구조

하나씩 정리해보겠다.

2. 문자 집합 또는 문자 셋(Charset Set) or CCS(Coded Character Set)

"글자들의 집합을 정의한 것"

영어를 예로 들어보자.

  1. 영어에서 알파벳은 문자집합이라고 할 수 있다.
  2. 위의 (1)의 문자집합에 정수값을 부여하면 부호화된 문자코드 - CCS(Coded Character Set)이라고 불린다.
  3. 부호화된 문자코드(CCS)는 그 값을 직접 사용하기도 하고, 인코딩해서 값을 변환해서 사용하기도 한다.
  4. ASCII 코드는 문자집합과 그에 부여된 코드를 그대로 사용하는 예로 볼 수 있다.

유니코드를 예로 들어보자.

  1. 유니코드는 전세계의 문자들을 문자집합으로 가진다.
  2. 유니코드는 각각의 문자 코드를 가지고 있다.
  3. 유니코드는 전세계의 문자들이 추가되고 있으므로 문자집합이 변하며 확장하고 있다. 이는 문자집합의 특성 중 하나다. 영어의 예에서 ASCII방식과 다른점이다.
  4. 유니코드는 이 문자코드를 인코딩해서 사용하는 여러가지 방식이 있다.

3. 문자 인코딩 형태(Character Encoding Form)

  • 문자 집합에 부여된 문자 코드들을 그대로 사용하기도 하지만, 인코딩하여 다른 값으로 변환하여 사용한다.
  • 인코딩은 각각 다른 특성을 가지고 목적에 따라서 달리 사용할 수 있다.
  • 유니코드를 문자집합으로 사용하면서 인코딩 차이점에 대해서 이해하는 것이 중요해졌다.
  • 문자 인코딩 형태는 각각의 규격이 있으며 이 값을 해석하면 결국 문자코드가 되고 이것을 이용해서 문자를 표현하게 된다.

4. 문자 인코딩 구조(Character Encoding Scheme)

  • 문자 인코딩 구조는 연속된 바이트를 표현하는 방법이다. 문자에서는 엔디언을 통해서 표현한다.
  • BOM(Byte Order Mark)라는 값을 사용해서 문자열의 바이트 순서를 명시해 줄 수 있다.
  • 널리 쓰이는 UTF-8의 경우 BOM을 명시하지 않아도 되며, 명시 하는 것을 추천하지 않는다.
  • 엔디언은 컴퓨터의 메모리와 같은 1차원의 공간에 여러개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법윽 특히 Byte Order라고 한다.
  • 엔디언은 큰 단위가 아에 나오는 빅 엔디언, 작은 단위가 앞에 나오는 리틀 엔디언으로 나눌 수 있으며, 둘다 속하지 않거나, 둘다 지원하는 경우를 미들 엔디언이라고 부르기도 한다.

참조 자료

다시 읽을 때 위의 대략적인 흐름을 가지고 아래 자료들을 다시 순회하는게 좋겠다.

  1. 한글 위키피디아: 문자 인코딩 - https://ko.wikipedia.org/wiki/문자_인코딩
  2. 영어 위키피디아: character encoding - https://en.wikipedia.org/wiki/Character_encoding
  3. 한글 위키피디아: 엔디언 - https://ko.wikipedia.org/wiki/엔디언
  4. 영어 위키피디아: utf-8 - https://en.wikipedia.org/wiki/UTF-8
  5. 나무위키: 인코딩 - https://namu.wiki/w/인코딩
  6. 유니코드 스탠다드 6.0 - https://www.unicode.org/versions/Unicode6.0.0/ch02.pdf
    1. 여기서 utf-8의 BOM에 대한 정보를 검색할 수 있다.
  7. 영어 위키피디아: unicode - https://en.wikipedia.org/wiki/Unicode#UTF

기타

이야기1

  • 아스키코드는 알파벳을 충분히 표현했지만 다양한 국가에서 컴퓨터를 사용하면서 각국의 언어를 표현하려고 했다.
  • 알파벳 이외의 특수문자들 영역에 각국의 문자를 넣어서 사용했다.
  • 그러나 이 방식은 문제점이 있었는데
    1. A국가에서 특수문자영역을 사용해서 화면 출력을 꾸몄을 때, B국가에서는 해당 국가의 문자로 출력되는 문제가 있었다.
    2. 하나의 페이지에서 여러 국가의 문자를 표현하는 것은 불가능했다. 현재를 예로 들면 유투브 댓글 같이 여러 국가의 댓글을 표현할 수 없는 것이다.
    3. 이것은 문자 집합의 문제이기도 하고, 해당 영역이 매우 협소해서 발생한 문제이기도 하다.
  • 각국의 다양한 문자를 하나의 페이지에서 올바르게 출력하는 방법을 강구하기 시작했다.
  • 유니코드는 전세계의 모든 문자를 표현하고 다루기 위해서 만들어졌다.
  • 유니코드를 사용하면 한 페이지에서 각국의 문자들을 충돌 없이 표현할 수 있다.

이야기2

  • 웹 프로그래머 관점에서 경험을 정리해보면
  • 문자 인코딩을 학습해야 하는 이유는.
  • EUC-KR과 같은 과거의 문자열들에서 왜 UTF-8로 변경되었는지 알 수 있다.
  • 해당 문자열을 변환해야 하는 경우가 있었는데, 그 작업을 왜 수행해야 하는지. 문제가 발생하면 어떤 부분을 살펴보아야 하는지 위의 지식으로 추측해 볼 수 있을 것이다.
  • 문자 인코딩 방식에 따라서 저장 크기가 달라질 수 있으므로 대용량 텍스트를 처리할 때 최적화에 쓸 수 있을 것이다.