한글 유니코드값 사용하기
Programing/JAVA 2014. 1. 22. 00:36 |초성
ㄱ |
ㄲ | ㄴ | ㄷ | ㄸ | ㄹ | ㅁ | ㅂ | ㅃ | ㅅ | ㅆ | ㅇ | ㅈ | ㅉ | ㅊ | ㅋ | ㅌ |
ㅍ |
ㅎ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
중성
ㅏ |
ㅐ |
ㅑ |
ㅒ |
ㅓ |
ㅔ |
ㅕ |
ㅖ |
ㅗ |
ㅘ |
ㅙ |
ㅚ |
ㅛ |
ㅜ |
ㅝ |
ㅞ |
ㅟ |
ㅠ |
ㅡ |
ㅢ |
ㅣ |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
종성
|
ㄱ |
ㄲ |
ㄳ |
ㄴ |
ㄵ |
ㄶ |
ㄷ |
ㄹ |
ㄺ |
ㄻ |
ㄼ |
ㄽ |
ㄾ |
ㄿ |
ㅀ |
ㅁ |
ㅂ |
ㅄ |
ㅅ |
ㅆ |
ㅇ |
ㅈ |
ㅊ |
ㅋ |
ㅌ |
ㅍ |
ㅎ |
0 |
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 |
유니코드는 각 문자의 종류를 나타내는 번호와 값으로 이루어져 있다.
한글의 경우는 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 |