2009-09-24 4 views
4

iphone 앱을 쓰고 JSON을 반환하는 REST API에서 데이터를 가져옵니다. 내 문제는 일부 데이터에 특수 문자가 포함되어있어 오류가 발생한다는 것입니다. 예 : 그렇지 않으면 모든 것이 잘 작동, 데이터가 "jsonString"반환에 특수 문자가 때마다iPhone, JSON의 특수 문자 응답

NSString *jsonString = [[NSString alloc] 
          initWithData:receivedData 
          encoding:NSUTF8StringEncoding]; 
NSMutableArray *tempResults = [[[jsonString JSONValue] 
          objectForKey:@"getRegionResortsLastUpdatedResponse"] 
          objectForKey:@"return"]; 

"(널)"

MartÌn 
Petite-RiviËre-Saint-FranÁois 

여기 내 현재 코드입니다.

내 마지막으로 처리 할 수있는 것이거나 문자 코드를 출력하기 위해 API를 수정해야합니까?

답변

3

-initWithData:encoding:이 nil을 반환하면 데이터가 요청한 인코딩으로 인코딩되지 않은 것입니다. 나는 UTF8을 보내지 않는다고 의심하고 Windows 코드 페이지 또는 Latin1 중 하나와 같은 다른 인코딩을 보내고 있습니다. NSString documentation에서 문자열 인코딩을 참조하십시오.

2

를 사용하여 내가 이런 짓을 완벽하게 나를 위해 작동 코드를 인코딩하는 기능에 따라 ....

+ (NSData*) resolveXmlSpecialEntities:(NSData*)xmlData 
{ 
    if (xmlData == nil) 
     return nil; 
    if ([xmlData length] == 0) 
     return xmlData; 

    NSMutableString* xmlString = [[NSMutableString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding]; 
    [xmlString replaceOccurrencesOfString:@""" withString:@"\"" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"<" withString:@"##??##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@">" withString:@"##?!##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"<br>" withString:@"##br##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"</br>" withString:@"##/br##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"<b>" withString:@"##b##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"</b>" withString:@"##/b##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"<center>" withString:@"##center##"options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"</center>" withString:@"##/center##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"##??##![CDATA[" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"]]##?!##" withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"&" withString:@"##ampersand##" options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 
    [xmlString replaceOccurrencesOfString:@"##ampersand##nbsp;" withString:@" " options:NSLiteralSearch range:NSMakeRange(0, [xmlString length])]; 

    xmlData = [xmlString dataUsingEncoding:NSUTF8StringEncoding]; 
    [xmlString release]; 
    return xmlData; 
} 

+ (NSString*) stringByRemovingResolversInXmlString:(NSString*)xmlString 
{ 
    NSMutableString* stringToChange = [NSMutableString stringWithString:xmlString]; 

    [stringToChange replaceOccurrencesOfString:@"##??##" withString:@"<" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##?!##" withString:@">" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##br##" withString:@"<br>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##/br##" withString:@"</br>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##b##" withString:@"<b>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##/b##" withString:@"</b>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##center##" withString:@"<center>"options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##/center##" withString:@"</center>" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 
    [stringToChange replaceOccurrencesOfString:@"##ampersand##" withString:@"&" options:NSLiteralSearch range:NSMakeRange(0, [stringToChange length])]; 

    return [NSString stringWithString:stringToChange]; 
}