블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

'유니코드'에 해당되는 글 1

  1. 2006.09.26 유니코드 프로그래밍
2006. 9. 26. 13:12 Programing

출처 : 스몰토크와 객체지향이야기


유니코드란?

국제표준으로 제정된 2바이트계의 만국 공통의 국제 문자부호 체계(UCS: Universal Code System)를 말한다. 애플컴퓨터·IBM·마이크로소프트 등이 컨소시엄으로 설립한 유니코드(Unicode)가 1990년에 첫 버전을 발표하였고, ISO/IEC JTC1에서 1995년 9월 국제표준으로 제정하였다. 공식 명칭은ISO/IEC 10646-1(Universal Multiple-Octet Coded Character Set)이다.


데이터의 교환을 원활하게 하기 위하여 문자 1개에 부여되는 값을 16비트로 통일하였다. 코드의 1문자당 영어는 7비트, 비영어는 8비트, 한글이나 일본어는 16비트의 값을 지니는데, 이를 모두 16비트로 통일한 것이다. ISO/IEC 10646-1의 문자판에는 전세계에서 사용하고 있는 26개 언어의 문자와 특수기호에 대해 일일이 코드값을 부여하고 있다. 최대로 수용할 수 있는 문자수는 6만 5,536자이다. 이 가운데 3만 8,885자는 주요 국가의 언어를 구현하는 용도로 이미 할당되어 있고 6400자는 사용자 정의 영역으로, 나머지는 2만여 자는 새로 추가될 언어 영역으로 각각 비워두고 있다. 코드 할당비율을 보면 한자가 39.89%로 가장 많고, 한글 17.04%, 아스키 및 기호문자 10.39% 등의 순이다.

여기에 포함된 한글 코드 체계는 옛 한글의 자모를 포함한 한글자모 240자(HANGUL JAMO, 11열)와 한국표준인 KSC 5601의 조합형 한글자모 94자(HANGUL COMPATIBILITY, 31열), 한글에서 구현할 수 있는 최대 글자수 1만 1,172자를 가나다순으로 배열해 놓은 완성형(HANGUL, AC열∼D7열) 등 3종으로 되어 있다. 또한 각국의 문자를 2바이트로 수용하기 위해 우리나라와 중국·일본·타이완의 한자를 통합하였다. 한자의 비중이 높은만큼 동양권에서는 서체의 통합과 입출력 방식에 대해 계속 논의를 해오고 있다.

유니코드에서 한글은 십진수로 44032부터 55203까지입니다.
이 유니코드 한글의 패턴을 분석해보면,

1. 초성은 19자로
ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ,
ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ
의 순서이고,

2. 중성은 21자로
ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅗ, ㅘ,
ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ,

의 순서,

3. 종성은 28자로
(없음), ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ,
ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ,
ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ
의 순서입니다.

따라서 19*21*28 = 11172 = 55203-44032+1 자의 한글이 구성됩니다.

이들 한글 초/중/종성으로 코드를 구성할 때,
초성, 중성, 종성의 순서로 코드를 구성합니다.
즉, 코드 44032는 '가' 이고, 코드 44033은 '각', 코드 44034는 '갂', ...
'가'에 종성 붙이는 것이 끝나면 '개', '객', ...
이런 식입니다.

따라서, 어떤 글자의 코드에서 44032를 빼고, 21*28로 나누면,
0 ~ 18의 숫자를 얻게 되고, 이는 위 초성의 순서와 같습니다.
마찬가지로, 44032를 빼고, 21*28로 나눈 나머지를 다시 28로 나눈 몫은
0 ~ 20이고, 이는 위 중성의 순서와 같습니다.
마지막으로, 44032를 빼고, 21*28로 나눈 나머지를 다시 28로 나눈 나머지는
0 ~ 27이고, 이는 위 종성의 순서와 같습니다.

따라서 char ch 의 종성을 알고자 한다면,
int third = ( ( ch - 44032 ) % ( 21 * 28 ) ) % 28;
로 얻은 int third 값을 이용하면 됩니다.

참고로 초성은
int first = ( ch - 44032 ) / ( 21 * 28 );
중성은
int second = ( ch - 44032 ) % ( 21 * 28 ) / 28;
입니다.

'Programing' 카테고리의 다른 글

Drag & Drop로 구현한 쇼핑몰 샘플  (0) 2006.11.09
JAVA(JSP)가 좋은점이 무엇이냐...  (1) 2006.10.28
Sort Algorithm  (0) 2006.10.24
웹해킹 - SQL 인젝션  (0) 2006.10.14
스파게티 소스  (0) 2006.05.16
posted by 초딩입맛제주아재
prev 1 next