유니코드에서 초성,중성,종성 분리
유니코드에서 한글은 0xd7a3 부터 - 0xac00 에 존재하죠..
총 개수는 11172개 입니다.

초성은 19개
중성은 21개
종성은 28개

그래서 한글 총갯수는 19*21*28개 글자가 있구

모든 글자를 표시할수 있죠..

그리고 순서대로(무지 편함) 있죠..

간단한 공식으로 글자도 만들수 있고 분해도 가능합니다.

아래는 분해공식이구 조립은 역으로 하면되죠..

전에 쓰는 코드에서 분석하는 부분만 추출해서 올립니다.

글자 분석할때는 유니코드로 하는게 좋습니다.




int strlen = szText.Length();
BSTR bmsg = szText;
BYTE *rtval = new BYTE[strlen*4];
int i;
for(i=0; i< strlen;i++)
{
if (bmsg[i] < 0xAC00 || bmsg[i] > 0xd7a3)
{
rtval[i*4] = rtval[i*4+1]= rtval[i*4+2]= rtval[i*4+3] = 0;
}
else
{
int chohab = bmsg[i] - 0xAc00;
int cho = chohab /21 / 28;
int chung = (chohab % (21*28)) / 28;
int chong = chohab % 28;

switch (cho)
{
case 0: // 가
case 1: // 까
case 5: // 라
case 15: // 카
case 11: // 아
case 2: // 나
case 12: // 자
case 16: // 타
case 9: // 사
case 18: // 하
case 3: // 다
case 4: // 따
case 10: // 싸
case 13: // 짜
case 14: // 차
case 6: // 마
case 7: // 바
case 8: // 빠
case 17: // 파
default:
break;
}


switch (chung)
{
case 0: // 아
case 1: // 애
case 2: // 야
case 3: // 얘
case 4: // 어
case 5: // 에
case 6: // 여
case 7: // 예
case 8: // 오
case 17: // 유
case 9: // 와
case 12: // 요
case 10: // 왜
case 11: // 외
case 13: // 우
case 14: // 워
case 15: // 웨
case 16: // 위
case 18: // 으
case 19: // 의
case 20: // 이
default:
break;
}


switch (chong)
{
case 0: // 아
case 1: // 악
case 2: // 앆
case 3: // 앇
case 8: // 알
case 9: // 앍
case 10: // 앎
case 11: // 앏
case 12: // 앐
case 13: // 앑
case 14: // 앒
case 15: // 앓
case 24: // 앜
case 4: // 안
case 5: // 앉
case 6: // 않
case 22: // 앚
case 19: // 앗
case 21: // 앙
case 7: // 앋
case 20: // 았
case 23: // 앛
case 25: // 앝
case 27: // 앟
case 16: // 암
case 17: // 압
case 18: // 앖
case 26: // 앞
default:
}
}

}
by 멋진하루 | 2004/10/01 08:10 | programming | 트랙백 | 덧글(0)
트랙백 주소 : http://kudak.egloos.com/tb/740202
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >
rss

skin by 이글루스