2010-08-01 2 views
1

내 코코아 GUI에 특수 서식 (글꼴, 색 등)이 필요한 문자열이 있습니다. 자연스럽게, 나는 속성 문자열을 사용하고 있습니다. 편의를 위해, 나는 RTF로 문자열을 초기화 :NSASCIIStringEncoding 특수 문자가 포함 된 RTFString?

NSString *inputString = @"This string has special characters"; 
NSString *rtfString = [NSString stringWithFormat:@"{@"***LENGTHY RTF FORMATTING STRING *** %@", inputString]; 
NSAttributedString *testString = [[NSAttributedString alloc] initWithRTF:[rtfString dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:nil]; 

문제는의 "inputString"때문에 UTF8Encoding에 제대로 표시되지 않는 특수 문자가있을 수 있습니다. 그들은 다른 기호로 대체됩니다. è은 Å ©으로 남습니다.

NSData* intermediateDataString=[inputString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

inputString = [[[NSString alloc] initWithData:intermediateDataString encoding:NSUTF8StringEncoding] autorelease]; 

이 예상치 못한 문자를 표시하지 않지만, 모든 악센트를 제거 수행하고 그 대신에 악센트가없는 편지 잎 - é가로 남겨을 :

그래서

, 지금 나는이 일을 해요 e.

모든 것을 읽을 수 있기 때문에 개선되었지만 이상적인 것은 아닙니다.

생각하십니까?

답변

1

나는 이렇게 할 것입니다. 첫째, 더미 기인 캐릭터 생성 :

NSString *dummyRTFString = @"***LENGTHY RTF FORMATTING STRING *** A"; 
NSAttributedString *dummyAS = [[NSAttributedString alloc] 
             initWithRTF:[rtfString dataUsingEncoding:NSUTF8StringEncoding] 
           documentAttributes:nil]; 

및 특성 구하십시오

NSAttributedString* as=[[NSAttributedString alloc] initWithString:inputString attributes:attributes]; 

또 다른 방법은이다 :

NSDictionary*attributes=[dummyAS attributesAtIndex:0 effectiveRange:NULL]; 
[dummyAS release]; 

을 지금은 다른 기인 문자열을 만들려면이 속성을 사용합니다 RTF 대신 HTML을 사용하십시오. 비 ASCII 문자를 유니 코드로 포함 할 수 있습니다.

+0

나는이 아이디어를 오히려 좋아합니다. 나는 그것을 밖으로 시도 할 것이다. 감사! –

+0

BEAUTIFUL !!!! 매력처럼 일했습니다. 얼마나 훌륭한 아이디어인가! –

0

첫 번째 코드 줄에서는 실제로는 @"This string has special characters"이라고 가정합니다. 그렇지 않으면 컴파일 오류가 발생합니다. 두 번째 줄에는 @"이 추가 된 것처럼 보입니다.

UTF-8을 사용하고 있다면 왜 NSASCIIStringEncoding이라고 말합니까?

정말, 특수 문자가 포함 된 문자열을 포함한 RTF를 코드에 포함시키지 말고 리소스에 넣어야합니다.

+0

서식이 지정된 텍스트는 동적이어야하지만 RTF는 클라이언트의 디스플레이 유형입니다. –

+0

그리고 네, 거기에 "@", 난 조금 난처했다 ... –