완성형 한글 코드표 매뉴얼
1. 개요
- KSC5601은 한국어 문자 세트를 정의하는 완성형 한글 인코딩 표준으로, 1987년 한국정보통신표준(KS X 1001)에서 제정
- 이 표준은 총 11,172개의 완성형 한글과 한자, 특수문자를 포함하며, 주로 2바이트 코드(94×94 배열)를 사용하여 표현
2. KSC5601 코드 영역
2-1. 주요 코드 범위
| 코드 영역 | 설명 | 범위 |
|---|---|---|
| 한글 완성형 문자 | 완성형 한글 2,350자 | 0xB0A1 ~ 0xC8FE |
| 한자 및 특수문자 | 한자와 특수 기호 포함 | 기타 영역 |
2-2. 한글 완성형 문자 구조
한글 완성형 문자는 초성, 중성, 종성의 조합으로 구성됩니다. 각 조합은 KSC5601 표준에 따라 고유한 코드값을 가짐
3. 초성, 중성, 종성 인덱스
| 초성 | 인덱스 | 중성 | 인덱스 | 중성 | 인덱스 |
|---|---|---|---|---|---|
| ㄱ | 0 | ㅏ | 0 | ㅏ | 0 |
| ㄲ | 1 | ㅐ | 1 | ㅐ | 1 |
| ㄴ | 2 | ㅑ | 2 | ㅑ | 2 |
| ㄷ | 3 | ㅒ | 3 | ㅒ | 3 |
| ㄸ | 4 | ㅓ | 4 | ㅓ | 4 |
| ㄹ | 5 | ㅔ | 5 | ㅔ | 5 |
| ㅁ | 6 | ㅕ | 6 | ㅕ | 6 |
| ㅂ | 7 | ㅖ | 7 | ㅖ | 7 |
| ㅃ | 8 | ㅗ | 8 | ㅗ | 8 |
| ㅅ | 9 | ㅘ | 9 | ㅘ | 9 |
| ㅆ | 10 | ㅙ | 10 | ㅙ | 10 |
| ㅇ | 11 | ㅚ | 11 | ㅚ | 11 |
| ㅈ | 12 | ㅛ | 12 | ㅛ | 12 |
| ㅉ | 13 | ㅜ | 13 | ㅜ | 13 |
| ㅊ | 14 | ㅝ | 14 | ㅝ | 14 |
| ㅋ | 15 | ㅞ | 15 | ㅞ | 15 |
| ㅌ | 16 | ㅟ | 16 | ㅟ | 16 |
| ㅍ | 17 | ㅠ | 17 | ㅠ | 17 |
| ㅎ | 18 | ㅡ | 18 | ㅡ | 18 |
| ㅢ | 19 | ㅢ | 19 | ||
| ㅣ | 20 | ㅣ | 20 |
4. KSC5601 한글 코드 계산 방법
KSC5601 코드 계산은 초성, 중성, 종성 인덱스를 기반으로 다음 공식을 사용:
KSC5601 코드 인덱스 = (초성 인덱스 x 588) + (중성 인덱스 x 28) + 종성 인덱스
계산 단계
- 초성, 중성, 종성 인덱스 확인:
- 초성은 0
18, 중성은 020, 종성은 0~27로 구분
- 초성은 0
- 공식에 대입:
- 초성 인덱스 × 588
- 중성 인덱스 × 28
- 종성 인덱스를 모두 합산
- 기준점(0xB0A1)을 더해 최종 코드값 계산:
- 최종 코드값 = 0xB0A1 + KSC5601 코드 인덱스
예제 계산
”가”의 코드 계산:
- 초성: ㄱ (0)
- 중성: ㅏ (0)
- 종성: 없음 (0)
- (0 x 588) + (0 x 28) + 0 = 0
- 최종 코드값: 0xB0A1
”각”의 코드 계산:
- 초성: ㄱ (0)
- 중성: ㅏ (0)
- 종성: ㄱ (1)
- (0 x 588) + (0 x 28) + 1 = 1
- 최종 코드값: 0xB0A2
”낙”의 코드 계산:
- 초성: ㄴ (2)
- 중성: ㅏ (0)
- 종성: ㄱ (1)
- (2 x 588) + (0 x 28) + 1 = 1177
- 최종 코드값: 0xB3AB
”닿”의 코드 계산:
- 초성: ㄷ (3)
- 중성: ㅏ (0)
- 종성: ㅎ (27)
- (3 x 588) + (0 x 28) + 27 = 1791
- 최종 코드값: 0xB5CF
”삶”의 코드 계산:
- 초성: ㅅ (9)
- 중성: ㅏ (0)
- 종성: ㄻ (10)
- (9 x 588) + (0 x 28) + 10 = 5292
- 최종 코드값: 0xBDA6
”닭”의 코드 계산:
- 초성: ㄷ (3)
- 중성: ㅏ (0)
- 종성: ㄺ (9)
- (3 x 588) + (0 x 28) + 9 = 1761
- 최종 코드값: 0xB5C1
5. KSC5601 코드표 요약
| 문자 | 초성 | 중성 | 종성 | 인덱스 | 코드값 |
|---|---|---|---|---|---|
| 가 | ㄱ | ㅏ | 없음 | 0 | 0xB0A1 |
| 각 | ㄱ | ㅏ | ㄱ | 1 | 0xB0A2 |
| 간 | ㄱ | ㅏ | ㄴ | 2 | 0xB0A3 |
| 갇 | ㄱ | ㅏ | ㄷ | 3 | 0xB0A4 |
| 갈 | ㄱ | ㅏ | ㄹ | 4 | 0xB0A5 |
| 갉 | ㄱ | ㅏ | ㄺ | 5 | 0xB0A6 |
| 갊 | ㄱ | ㅏ | ㄻ | 6 | 0xB0A7 |
| 감 | ㄱ | ㅏ | ㅁ | 7 | 0xB0A8 |
| 갑 | ㄱ | ㅏ | ㅂ | 8 | 0xB0A9 |
| 값 | ㄱ | ㅏ | ㅄ | 9 | 0xB0AA |
| 나 | ㄴ | ㅏ | 없음 | 1176 | 0xB3AA |
| 낙 | ㄴ | ㅏ | ㄱ | 1177 | 0xB3AB |
| 난 | ㄴ | ㅏ | ㄴ | 1178 | 0xB3AC |
| 다 | ㄷ | ㅏ | 없음 | 1764 | 0xB5B0 |
| 닥 | ㄷ | ㅏ | ㄱ | 1765 | 0xB5B1 |
| 단 | ㄷ | ㅏ | ㄴ | 1766 | 0xB5B2 |
| 달 | ㄷ | ㅏ | ㄹ | 1767 | 0xB5B3 |
| 닮 | ㄷ | ㅏ | ㅁ | 1772 | 0xB5B6 |
| 닷 | ㄷ | ㅏ | ㅅ | 1776 | 0xB5B8 |
| 닸 | ㄷ | ㅏ | ㅆ | 1777 | 0xB5B9 |
| 담 | ㄷ | ㅏ | ㅁ | 1780 | 0xB5BB |
| 답 | ㄷ | ㅏ | ㅂ | 1781 | 0xB5BC |
| 닿 | ㄷ | ㅏ | ㅎ | 1795 | 0xB5CE |
| 라 | ㄹ | ㅏ | 없음 | 2352 | 0xB8A1 |
| 랄 | ㄹ | ㅏ | ㄹ | 2360 | 0xB8A9 |
| 람 | ㄹ | ㅏ | ㅁ | 2368 | 0xB8B0 |
| 랑 | ㄹ | ㅏ | ㅇ | 2376 | 0xB8B8 |
6. KSC5601 코드와 유니코드의 특징
6.1. KSC5601과 Unicode의 개요
KSC5601
- KSC5601(KS X 1001)**은 1987년 대한민국에서 제정된 문자 집합 표준으로, 완성형 한글을 포함
- KSC5601은 2,350개의 완성형 한글과 약 8,800개의 한자, 특수문자 등을 포함한 총 94×94의 2바이트 문자 집합을 정의
- 모든 한글 문자는 초성(19개), 중성(21개), 종성(28개)의 조합으로 이루어진 완성형 문자만을 표현
Unicode
- Unicode는 전 세계의 모든 문자를 하나의 체계로 통합하기 위해 설계된 문자 집합 표준
- 한글의 경우 조합형 한글 방식을 지원하여 초성, 중성, 종성을 조합하여 무제한의 문자를 생성할 수 있음
- Unicode의 한글 범위:
- U+AC00 ~ U+D7A3: 완성형 한글 11,172자
- U+1100 ~ U+11FF: 한글 자모 (초성, 중성, 종성의 개별 문자)
- U+3130 ~ U+318F: 호환용 한글 자모
6.2. KSC5601과 Unicode의 주요 차이점
| 항목 | KSC5601 | Unicode |
|---|---|---|
| 한글 처리 방식 | 완성형 문자만 표현 가능 | 조합형 문자와 완성형 문자 모두 지원 |
| 문자 수 | 2,350개의 한글 문자 | 11,172개의 한글 문자 |
| 조합 가능성 | 초성, 중성, 종성 조합 불가 (정해진 글자만 지원) | 초성, 중성, 종성 조합 가능 |
| 코드 범위 | 0xB0A1 ~ 0xC8FE | U+AC00 ~ U+D7A3 |
| 표현 가능 문자 | 제한적 (일부 문자 표현 불가) | 전 세계 모든 문자 표현 가능 |
6.3. KSC5601과 Unicode의 매핑 관계
6.3.1. 기본 매핑
- KSC5601의 완성형 한글은 Unicode의 완성형 한글 범위(U+AC00 ~ U+D7A3)와 1:1로 매핑
- KSC5601의 첫 번째 글자인 “가”는 0xB0A1이고, Unicode에서는 U+AC00에 대응
- KSC5601에서 다음 글자는 0xB0A2로 정의되며, Unicode에서는 U+AC01에 해당
6.3.2. 매핑 공식
KSC5601 코드와 Unicode 코드의 변환은 아래와 같은 수식을 따름
KSC5601 → Unicode
Unicode 코드 = U + AC00 + (KSC5601 인덱스)
- 예: “가” (KSC5601 0xB0A1)
- 인덱스 = 0
- Unicode = U+AC00 + 0 = U+AC00
Unicode → KSC5601
KSC5601 인덱스 = Unicode 코드 − U + AC00
- 예: “각” (Unicode U+AC01)
- 인덱스 = U+AC01 - U+AC00 = 1
- KSC5601 = 0xB0A2