코딩하는 나귀

[출처 :  유니코드에서의 한글 (고구마S) |작성자 고구마]
 

유니코드(Unicode) 세상에 존재하는 수많은 언어들을 표현하기 위해 제정되었어요.

아스키코드와는 달리, 글자당 2Byte 할당하여요. 따라서 2^16개의 글자를 표현할 있지요!

 

유니코드의 일부 영역은 한글이 차지하고 있어요.

영역은 크게 아래와 같이 나눌 있어요.

 

1. 한글 자모 240

2. 한글 자모 94

3. 완성된 한글 11,172

 

여기서 '완성된 한글'이란, 한글 자모를 이용해 구현될 있는 모든 글자를 뜻해요.

또한 완성된 한글은 일정한 규칙 하에 배열되어 있어요.

그래서 유니코드로 표현된 한글 글자를 자모로 분해하거나, 다시 자모를 완성된 글자로 만들 있지요.

 

이러한 작업에는 아래 공식이 사용되어요.

 

유니코드 = 44032 + (초성 * 21 + 중성) * 28 + 종성

 

'초성', '중성', '종성' 위에서 언급했던 [ 한글 자모 94] 속하는 녀석들이에요.

 

초성 = "ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ"

중성 = "ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ"

종성 = " ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ" //공백 포함

 

각각의 첫글자의 값을 0으로 놓고, 뒤로 1 늘려가며 값을 부여하여요.

예를 들어, 초성의 ㄴ은 값이 2이고- 종성의 ㄴ은 값이 4 것이지요!

 

공식에 대입하여 볼까요?

 

''이라는 글자를 예로들게요.

공은 초성 '', 중성 '', 종성 ''으로 이루어진 글자에요.

 

유니코드 = 44032 + (0 * 21 + 8) * 28 + 21

                  = 44032 + 324 + 21

                  = 44377

 

'' 유니코드 값은 44377이군요!

 

이번에는 반대로, 글자로부터 그것의 초성, 중성, 종성 각각의 유니코드 값을 얻는 방법을 알아보아요.

이것 역시 간단해요. 위의 공식을 변형하여 사용하면 되어요.

 

초성 = (유니코드 - 44032) / (21 * 28)

중성 = (유니코드 - 44032) % (21 * 28) / 28

종성 = ((유니코드 - 44032) % (21 * 28)) % 28

 

유니코드의 이러한 공식은 아주 많은 용도로 사용될 있어요.

듣기로는, 유니코드 체계가 아니어서 한글 채팅을 없는 게임들에서-

이러한 방식으로 내용을 분해/조합하여 한글 채팅을 구현한다고 해요.