형 변환이 아니라 값 변환 문제인데 형 변환으로 해결하려다 2일동안 삽질했네요;

 

내용은 NSString 형 변수에 "\uXXXX\uXXXX" 유니코드 형식의 문자열 값이 들어있고 이 값을 한글등의 문자열 값으로 변환하는 내용입니다.

 

위에서도 언급하였지만 형변환이 아니라 값변환 이기 때문에 아래와 같은 메소드를 만들어서 해결하였습니다.

 

간략히 설명하자면,

유니코드 형식의 문자열 값을 가진 NSString 형 변수를 "\u" 를 구분자로 하여 파싱한 다음

"\u"를 제외한 나머지 16진수 값 4자리 문자열을 subString 해서 NSScanner 객체에 담습니다.

이 NSScanner 객체를 이용하여 문자열을 숫자값(int)으로 변환한 후 해당 숫자값을 "%C" 포맷을 이용하여 다시 문자열로 변경하는 메소드입니다.

 

-(NSString*)getNSStringFromUnicode:(NSString*)strUnicode {

    NSString *strResult = [[[NSString alloc] init] autorelease];

    NSString *strTmp;


    NSRange nRange;

 

    while ( 1 )

    {

        nRange = [strUnicode rangeOfString:@\\u];

 

        if ( nRange.length )

        {

            strResult = [strResult stringByAppendingString:[strUnicode substringToIndex:nRange.location]];

 

            strTmp = [strUnicode substringToIndex:nRange.location + 6];


            NSString *strHex = [strTmp substringWithRange:NSMakeRange(nRange.location+2, 4)];

            NSScanner *hexScanner = [NSScanner scannerWithString:strHex];

            [hexScanner setScanLocation:0];

            unsigned unicodeHexValue;

            [hexScanner scanHexInt:&unicodeHexValue]


            strResult = [strResult stringByAppendingFormat:@"%C",unicodeHexValue];


            strUnicode = [strUnicode substringFromIndex:nRange.location + 6];

        }

        else

        {

            strResult = [strResult stringByAppendingFormat:@"%@", strUnicode];

            break;

        }

    }


    return strResult;

}


출처 : http://my1over.blog.me/120102660176

'개발지식창고 > iOS' 카테고리의 다른 글

[iOS] http 통신  (0) 2014.01.15
HTTP 통신 (GET/POST) (동기/비동기)  (0) 2014.01.12
[iOS] Json 파싱  (0) 2014.01.12
[Object c]함수 선언 및 호출 방법 예제  (0) 2014.01.10
XCode 단축키  (0) 2013.12.25
Posted by 모과이IT
,