초성

ㅎ 

 0

1

2

10 

11 

12 

13 

14 

15 

16 

17 

18 


중성

ㅏ 

ㅐ 

ㅑ 

ㅒ 

ㅓ 

ㅔ 

ㅕ 

ㅖ 

ㅗ 

ㅘ 

ㅙ 

ㅚ 

ㅛ 

ㅜ 

ㅝ 

ㅞ 

ㅟ 

ㅠ 

ㅡ 

ㅢ 

ㅣ 

0

1

2

10 

11 

12 

13 

14 

15 

16 

17 

18 

19 

20 


종성

 

ㄱ 

ㄲ 

ㄳ 

ㄴ 

ㄵ 

ㄶ 

ㄷ 

ㄹ 

ㄺ 

ㄻ 

ㄼ 

ㄽ 

ㄾ 

 ㄿ

ㅀ 

ㅁ 

ㅂ 

ㅄ 

ㅅ 

ㅆ 

ㅇ 

ㅈ 

ㅊ 

ㅋ 

ㅌ 

ㅍ 

ㅎ 

0

10 

11 

12 

13 

14 

15 

16 

17 

18 

19 

20 

21 

22 

23 

24 

25 

26 

27 



유니코드는 각 문자의 종류를 나타내는 번호와 값으로 이루어져 있다.

한글의 경우는 0xAC00으로 시작하고 이곳에 초성, 중성, 종성의 값을 넣으면 된다.


자소결합


공식으로는 0xAC00(44032) + [초성Index]*0x24C(588) + [중성Index]*0x1C(28) + [종성Index]이다.
※16진수(10진수)로 표시했다.

※단순히 계산기로 할경우 44032 +  [초성Index]*588 + [중성Index]*28 + [종성Index] 가 편함


만약에 문자 '글'을 구하고 싶을 경우

초성 'ㄱ'의 index 0

중성 'ㅡ'의 index 18

종성 'ㄹ'의 index 8

을 이용하여 0xAC00 + [0]*588 + [18]*28 + 8 = 0xAE00의 값을 사용하면된다.


자소분리


완성된 유니코드를 초성, 중성, 종성으로 분리하려면

char unicode = word - 0xAC00;

char cho = (char)((((unicode - (unicode % 28)) / 28) / 21) + 0x1100);

char jung = (char)((((unicode - (unicode % 28)) / 28) % 21) + 0x1161);

char jong = (char)((unicode % 28) + 0x11A7);


으로 해주면된다.

여기서 word는 완성형 유니코드를 나타낸다.


예를 들어 '짱'이란 word를 저 공식에 대입하여 연산하면

초성을 나타내는 char cho = 'ㅉ';

중성을 나타내는 char jung = 'ㅏ';

종성을 나타내는 char jong = 'ㅇ';

이 들어가게 된다.


자소출력


각 각의 초성, 중성, 종성을 따로 출력하고 싶을 경우

초성 0x1100

중성 0x1161

종성 0x11A7

에 index값을 더하여 출력하면된다.


예를 들어 '글'의 초성, 중성, 종성을 출력하고싶으면


ㄱ (0x1100)

ㅡ (0x1173)

ㄹ (0x11AF)


으로 나타나게 된다.


이렇게 만들어진 유니코드를 출력하기 위해서는

char unicode = (char)0xAE00;

이런식으로 캐스팅을 하여 출력하면된다.




추가로 char형 변수에 넣은 'ㄱ'과 유니코드로 분리된 초성, 종성의 'ㄱ'은 유니코드가 다르므로 equal연산 결과가 다르게 나온다.


'Programing > JAVA' 카테고리의 다른 글

외부 라이브러리 사용하기  (0) 2014.06.02
리눅스에서 자바 컴파일 하기  (0) 2014.05.30
File.separator 사용하기  (0) 2014.05.30
파일입출력 언어인코딩 변경  (0) 2014.01.18
정규표현식  (0) 2014.01.18
Posted by 핸꾸
: