2011-11-29 4 views
2

나는 다음과 같은 문제가 있습니다오브젝티브 C는 NSString 인코딩 모음 변이

가 나는 UITextField에 데이터를 입력하고 난 서버로 보내려고합니다. 그러나 입력하는 데이터에는 움라우트 (ö, ä, ü, ...)가 포함될 수 있습니다. 그럼 내가 서버에 전달할 때 잘못된 인코딩을 얻을. 하지만 UTF8로 인코딩하고 있습니다.

NSString *s = @"ö"; 
NSLog(@"%@", s); 
NSLog(@"%s", s.UTF8String); 

내가 뭘 잘못하고 있니? 두 번째 줄에는 완벽하게 괜찮은 "ö"가 표시되지만 세 번째 줄에는 다음과 같이 표시됩니다. √∂

인터넷 상에 많은 인코딩 게시물이 있지만 문제를 실제로 해결 한 것은 없습니다.

+0

출력 로그/터미널/올바르게 UTF-8로 선언/해석되고 있습니까? – Wevah

답변

1

서버와 통신 할 때 인코딩이나 디코딩을 제대로하고 있습니까?

stringByAddingPercentEscapesUsingEncoding:

형식으로 그 세 번째 NSLog 라인 출력은 "% S"에서 쓰레기를보고에 관해서는

stringByReplacingPercentEscapesUsingEncoding:

:

있는 NSString 그 멋진 기능을 가지고 기억 NSLog가 C 스타일의 바이트 콜렉션을 기대하며 높은 ascii 값을 제대로 표시하지 못할 수도 있음을 의미합니다. NSLogs의 "% @"형식은 NSString 객체를 의미하며 모든 문자열 인코딩은이를 제대로 수행해야합니다.

+0

% s (UTF-8 포함)는 나를 위해 작동합니다. 제 단말기가 올바르게 설정되어 있으면됩니다. – Wevah

+0

물론 @Wevah 물론 % s이 (가) 나를 위해 작동합니다 ...하지만 문제는 움라우트 또는 다른 발음 구별 기호 (http://en.wikipedia.org/wiki/Diacritic)와 함께 작동합니까? –

+0

예. [more characters] – Wevah

1

UTF8 및 NSString을 처리 할 때 네트워크를 통해 보낼 수있는 NSData 객체를 가져 오려면 [@"ö" dataUsingEncoding:NSUTF8StringEncoding]을 사용해야합니다. 이것은 항상 잘 작동합니다.