Objective-C에서 한글 초성, 중성, 종성 분리

Author : 알쯔 / Date : 2010.04.19 17:51 / Category : 팁로그

NSString에 담긴 한글을 초성, 중성, 종성으로 분리하기 위하여, wchar_t 형태로 변경하려고 삽질했던 경험담을 올려봅니다.

일단, wchar_t로 변경하려고 했던 이유는 유니코드를 이용하여, 유니코드 코드값(?)연산을 이용하여 분리하려고 했었는데요.

젤 문제가 되었던것이 NSString을, wchar_t로 바꾸기가 너무 힘들었다는 점이죠.
결론은, 굳이 저같은 삽질을 하지 않더라도, NSString자체가 유니코드를 사용하는 변수로, 그냥 NSString의 변수를 바로 연산하여도 되더라 이말입니다. = _= 젝일슨.

유니코드 연산법에 대한 PHP코드는 옛날에 적어두었던 글을 링크해둡니다.
2006/02/04 - UTF-8 기준, 한글을 초성,중성,종성으로 분리하기
- (NSString *)GetUTF8String:(NSString *)str {
	NSArray *cho = [[NSArray alloc] initWithObjects:@"ㄱ",@"ㄲ",@"ㄴ",@"ㄷ",@"ㄸ",@"ㄹ",@"ㅁ",@"ㅂ",@"ㅃ",@"ㅅ",@" ㅆ",@"ㅇ",@"ㅈ",@"ㅉ",@"ㅊ",@"ㅋ",@"ㅌ",@"ㅍ",@"ㅎ",nil];
	NSArray *jung = [[NSArray alloc] initWithObjects:@"ㅏ",@"ㅐ",@"ㅑ",@"ㅒ",@"ㅓ",@"ㅔ",@"ㅕ",@"ㅖ",@"ㅗ",@"ㅘ",@" ㅙ",@"ㅚ",@"ㅛ",@"ㅜ",@"ㅝ",@"ㅞ",@"ㅟ",@"ㅠ",@"ㅡ",@"ㅢ",@"ㅣ",nil];
	NSArray *jong = [[NSArray alloc] initWithObjects:@"",@"ㄱ",@"ㄲ",@"ㄳ",@"ㄴ",@"ㄵ",@"ㄶ",@"ㄷ",@"ㄹ",@"ㄺ",@"ㄻ",@" ㄼ",@"ㄽ",@"ㄾ",@"ㄿ",@"ㅀ",@"ㅁ",@"ㅂ",@"ㅄ",@"ㅅ",@"ㅆ",@"ㅇ",@"ㅈ",@"ㅊ",@"ㅋ",@" ㅌ",@"ㅍ",@"ㅎ",nil];

	NSString *returnText = @"";
	for (int i=0;i<[str length];i++) {
		NSInteger code = [str characterAtIndex:i];
		if (code >= 44032 && code <= 55203) { // 한글영역에 대해서만 처리
			NSInteger UniCode = code - 44032; // 한글 시작영역을 제거
			NSInteger choIndex = UniCode/21/28; // 초성
			NSInteger jungIndex = UniCode%(21*28)/28; // 중성
			NSInteger jongIndex = UniCode%28; // 종성

			returnText = [NSString stringWithFormat:@"%@%@%@%@", returnText, [cho objectAtIndex:choIndex], [jung objectAtIndex:jungIndex], [jong objectAtIndex:jongIndex]];
		}
	}
	return returnText;
}
이렇게 해두고, NSLog([GetUTF8String:@"알쯔"]); 라고 하면 ㅇㅏㄹㅉㅡ 가 리턴됩니다.
Objective-C는 아직 공부중인 언어라 문법으로 적어둔게 거지같을 수 도 있고 release 안한 변수도 보이고 뭐 그렇습니다. 걍 참고용으로만 사용하세요.


Tags : , , , , , , ,

Trackbacks 0 / Comments 6

  • 1003coco 2010.07.14 16:57

    초성검색알고리즘을 사용해도될까용?

    REPLY / EDIT

    • Favicon of http://blog.arzz.com 알쯔 2010.07.16 20:19

      네 상관없습니다. ^^;;

      EDIT

  • NG 2010.08.17 21:19

    오브젝티브C 공부하면서 초성 인덱스 만들려고 자료를 찾다가
    이곳에서 많은 도움 얻고 갑니다.
    덕분에 잘 해결했습니다. ^^

    REPLY / EDIT

  • Favicon of http://agiletalk.posterous.com 작은아이 2010.10.22 11:17

    정말 좋은 팁 감사합니다 :)
    15번째 줄의 마지막 인자를 [cho objectAtIndex:jongIndex] 를 [jong objectAtIndex:jongIndex] 로 바꿔주세요~

    REPLY / EDIT

  • changuz 2011.07.22 10:22

    좋은 자료 감사합니다!
    쌍시옷 앞에 띄어쓰기가 있네요 ㅎㅎㅎ

    REPLY / EDIT

  • Favicon of https://www.childc.co.kr ㄷㅣㅆㅣ 2016.02.11 16:17 신고

    오.. 초성 뽑아내는걸 찾아 다녔었는데.. 감사합니다 ㅎㅎ

    REPLY / EDIT

Follow Me

Search

Statistics

  • Total : 2,318,657
  • Today : 8
  • Yesterday : 48

Blog Information

알쯔

Calendar

«   2019/11   »
          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 28 29 30
Copyright © 알쯔의 외부기억장치 All Rights Reserved
Powered by ARZZ.COM