[출처 : http://divestudy.tistory.com/8]


사실 한글 인코딩에는 관심이 없었다. 그냥 대충 처리해도 잘 보고 잘 쓸수 있기때문에??

이번에 초성검색에 대한 문제를 해결하는데 문제가 생겼다.
한글이 어떻게 저장 되있냐에 따라 초성 검색 방식이 달라지기 때문이다.
어줍잖은 지식으로 조합형으로 되있겠지라고 했지만 이게 왠걸?!
조합형으로 저장을 안하네 ㅎㄷㄷ 시스템마다 다름 윈도우는 기본적으로 euc-kr(완성형)
어쨌든 우분투에서 만들어야 하니 우분투 인코딩셋에대해서 알아본 결과
UTF-8 이란것을 알수 있었다 (locale 명령어로 알수 있음)
UTF-8 이라.. 어서 많이 들어 본 단어 인데;; 브라우져에서도 보고 파일 전송때도 보고..
알고 보니 UNICODE를 표현하는 방법 중에 하나라고 한다.(UTF-8 뿐만아니라 -16, -32 등도 있음)
어쨌든!! 이런건 인터넷에 널려 있으니 참고 하면 되고 변환 방법을 알아보자!!

유니코드는 전세계 모든언어를 표기하기위해 만들어졌지만 한글만 변환하므로 이에 관련된것만 보겠다.
"가"는 UNICODE로 AC 00 (16 진수 표기 , UAC00 라고도 표기한다 앞의 U는 유니코드를 나타낼때) 이고
U-00000800 - U-0000FFFF 범위에 들어가므로 비트 마스크(?)는 1110xxxx 10xxxxxx 10xxxxxx 이다.

즉, UTF-8로 표기시 1110xxxx 10xxxxxx 10xxxxxx 형태가 되며 x는 AC00를 순서대로 넣어주면 된다.
AC00 => 1010 1100 0000 0000 이며 차례 대로 넣어주면

11101010 10110000 10000000 로 변환된다. 이것을 16진수로 바꿔 주면 EA B0 80 이 된다.

다음으로 알아볼것은 UNICODE를 초성, 중성, 종성으로 분리하는 방법이다.

"갈"을 분리 해보자! "갈"은 유니코드로 UAC08이다.

1) 분리할 문자를 AC00으로 뺀다 ( 0xAC08 - 0xAC00 = 0x8)
2) 1의 결과를 21로 나누고 28로 나눈 몫은 초성이다. (8/21/28 = 0)
3) 1의 결과를 21*28로 나눈 나머지와 28로 나눈 몫은 중성이다 ( (8 % (21*28)) / 28 = 0)
4) 1의 결과를 28로 나눈 나머지는 종성이다 ( 8 % 28  = 8 )

초성은  0  중성은  0  종성은 8을 테이블에서 찾으면 된다.

초성 테이블

10  11  12  13  14  15  16  17  18 
 ㄱ  ㄲ   ㄴ  ㄷ  ㄸ  ㄹ  ㅁ  ㅂ  ㅃ  ㅅ  ㅆ  ㅇ  ㅈ   ㅉ   ㅊ   ㅋ   ㅌ   ㅍ   ㅎ 

중성 테이블
 0  1  2  3  4  5  6  7  8 10  11  12  13  14  15  16  17  18 
 ㅏ  ㅐ  ㅑ  ㅒ  ㅓ  ㅔ  ㅕ  ㅖ  ㅗ  ㅠ  ㅘ ㅛ   ㅙ  ㅚ  ㅜ  ㅝ  ㅞ  ㅟ  ㅡ
 19 20 
 ㅢ  ㅣ  

종성 테이블
 0  1  2  3  4  5  6  7  8 10  11  12  13  14   15  16  17  18
   ㄱ  ㄴ  ㄵ  ㄶ  ㄷ   ㄹ   ㄺ   ㄻ   ㄼ  ㄽ  ㄾ  ㄿ  ㅀ   ㅁ  ㅂ  ㅄ 
19  20  21  22  23  24  25  26  27
ㅅ  ㅆ  ㅇ   ㅈ  ㅊ  ㅋ   ㅌ  ㅍ  ㅎ 


"ㄱ" + "ㅏ" + "ㄹ" 인걸 알수 있다11 이젠 초성 검색 ㄱㄱ씽!!!

+ Recent posts