반응형
반응형

1. 컴퓨터에서 한글을 표현하는 방법

  • 완성형

    • '가' ,'닭' 등의 글자를 그대로 표현하는 방법
    • EX) '가' 의 경우 0xB0A1 값을 가짐
  • 조합형

    • '가' 를 'ㄱ' + 'ㅏ' 형태로 조합해서 표현하는 방법
    • 한글을 표현하는데 이상적이나 요즘은 거의 사용하지 않음
  • 확장 완성형

    • 위의 완성형에서 표시하지 못하는 '똠'과 같은 모든 한글을 표현할 수 있도록 범위를 확장한 형태
    • 확장된 문자열은 글자순으로 정렬되어 있지 않음
  • 유니코드

    • 전세계 언어들을 하나의 방법으로 표시하기 위한 방법
    • 일종의 완성형 형태이며, 정렬되어 있음

2. 한글을 표현하는 문자열 세트(Character set) 종류

  • 요약
charset이름 내용
EUC-KR - 완성형 표현방법을 사용한 방법

- 총 2350개 한글을 표현 가능

- 2Byte를 사용하여 한글 표현
CP949 - 확장 완성형 표현방법을 사용한 방법

- EUC-KR을 확장하여 모든 한글을 표현 가능

- 2Byte를 사용하여 한글 표현
UTF-8 - 유니코드를 이용하는 방법

- 모든 한글을 표현 가능

- 3Byte를 이용해 한글 표현

3. EUC-KR

  • KS 완성형 + 아스키 코드가 합쳐진 형태
    • KSX 1001로 정의된 완성형 표현방법을 사용
  • 아스키 코드(영어 포함)는 1Byte(00~7F)로 표현됨
  • 한글은 2Byte로 표현하며 각 Byte가 A1~FE 영역을 가짐
    • A1~FE 가 94가지를 가지므로 94 X 94 = 8,836 가지를 표현 가능
    • 한글에는 한글, 한자, 부호가 포함되어 있으므로 모든 한글에 코드를 부여할 수 없음
    • 자주 사용하는 한글 2350개만 코드로 할당하였으므로 한글은 2350개만 표현 가능
    • 문자표를 참조하면 해당 Hex값을 확인 가능
  • 한글 표현 범위(2350자)
    • 0xB0A1('가') ~ 0xC8FE('힝')
    • 상위 비트 범위 0xB0 ~ 0xC8 (25가지)
    • 하위 비트 범위 0xA1 ~ 0xFE (94가지)
    • 25 X 94 = 2350자
  • 자음, 모음 표현 범위
    • 자음 30자 : 0xA4A1 ~ 0xA4BE
    • 모음 21자 : 0xA4BF ~ 0xA4D3
    • 옛 한글 자모 : 0xA4D5 ~ 0xA4FE
  • 특수 문자
    • 상위 비트 범위 : 0xA1 ~ 0xAC
    • 하위 비트 범위 : 0xA1 ~ 0xFE(94가지)

4. CP949

  • 모든 한글을 표현하기 위해 EUC-KR을 확장한 형태로 EUC-KR과 호환이 가능하다.
    • EUC-KR -> CP949의 경우 모든 한글에 대해 깨짐없이 변환 가능
    • CP949 -> EUC-KR 의 경우 EUC-KR 코드표에 없는 문자(예:'똠')는 변환시 문자 깨짐 발생함
  • EUC-KR의 확장이므로 아래 내용은 동일함
    • 아스키 코드는 1Byte로 표현
    • 한글은 2Byte로 표현하며 각 Byte가 A1~FE 영역을 가짐
  • EUC-KR에 누락된 한글들을 표현하기 위해 아래 범위에 코드를 부여
    • (81-A0)(41-5A, 61-7A, 81-FE)
    • (A1-C5)(41-5A, 61-7A, 81-A0)
    • (C6) (41-52)

5. UTF-8

  • 유니코드로 표현하는 방법으로 모든 한글을 표현 가능하다.
    • U+AC00 ~ U+D7A3 범위를 가짐
    • 초성(19) X 중성(21) X 종성(27+1) = 총 11,172 개의 한글 표현 가능
    • 한글 음절 참고
  • 가변 크기로 1~4바이트 크기를 가짐
  • 한글의 경우 3바이트로 표현
    • 실제 2바이트(16비트)로 모든 한글 표현 가능하나 유니코드 설계상 3바이트로 인코딩함(아래 인코딩 참조)

5.1 UTF-8 인코딩 방법

  • UTF-8 코드 범위
코드 범위 크기 UTF-8 설명
000000-00007F 1Byte 0xxxxxxx 아스키 코드 표현
000080-0007FF 2Byte 110xxxxx

10xxxxxx
- 첫 바이트는 '1'로 표현

- 두 번째 바이트는 '10'으로 표현
000800-00FFFF 3Byte 1110xxxx

10xxxxxx

10xxxxxx
- 첫 바이트는 '1'로 표현

- 나머지 바이트는 '10'으로 표현
010000-10FFFF 4Byte 11110xxx

10xxxxxx

10xxxxxx

10xxxxxx
SMP 영역
  • 최상위비트(MSB)를 판단하여 아스키코드 인지 다른 문자인지 판단
    • 최상위비트(MSB) 가 0이면, 1Byte로 인코딩 후 아스키코드 문자 표현
  • 최상위비트(MSB)가 1이면 첫 번째 byte의 앞 n개 bit를 비교해 2~4byte로 인코딩
    • 최상위 비트 3개가 110 이면, 2Byte로 인코딩 후 해당 코드표에 있는 문자 표현
    • 최상위 비트 4개가 1110 이면, 3Byte로 인코딩 후 해당 코드표에 있는 문자 표현(한글이 여기 포함됨)
    • 최상위 비트 5개가 11110 이면, 4Byte로 인코딩 후 해당 코드표에 있는 문자 표현
    • 두번째~ 네번째 byte 앞 2bit는 10으로 고정됨
  • 한글 UTF-8 인코딩 예시
    • '위' : 0xC704 = 1100 0111 0000 0100
    • 위의 16비트를 4 + 6 + 6 으로 나누어 3Byte 의 고정영역을 제외한 부분에 넣음
    • 1100 011100 000100 => 3개 영역으로 분리
    • 11101100 10011100 10000100 => 고정영역 제외 부분에 넣음
    • 11101100 => 0xEC
    • 10011100 => 0x9C
    • 10000100 => 0x84
    • UTF-8 로 3바이트 (EC9C84) 로 인코딩됨
반응형

+ Recent posts

반응형