반응형
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 | 110xxxxx10xxxxxx | - 첫 바이트는 '1'로 표현- 두 번째 바이트는 '10'으로 표현 |
000800-00FFFF | 3Byte | 1110xxxx10xxxxxx10xxxxxx | - 첫 바이트는 '1'로 표현- 나머지 바이트는 '10'으로 표현 |
010000-10FFFF | 4Byte | 11110xxx10xxxxxx10xxxxxx10xxxxxx | 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) 로 인코딩됨
반응형