ios
  • objective-c
  • nsxmlparser
  • 2013-08-15 2 views 3 likes 
    3

    현재 URL에 게시 할 문자열이 있습니다.URL에 게시 될 특수 문자로 문자열을 인코딩하는 방법은 무엇입니까? Objective-C

    "&"및 "?"와 같은 특수 문자가 발생하는 경우를 제외하고는 완벽하게 작동합니다. 그 후에 나오는 데이터는 POST되지 않습니다. 예를 들어 "& 무언가입니까?"라는 문자열이 있으면 "나 뭔가 있습니다"라는 메시지 만 표시됩니다. "?"는 게시 된 후 '2'로 변환됩니다.

    reason = 'What see see! Are you sure'2'' 
    

    나는 내가 볼 수있는대로 인코딩 할 수있는 뭔가가 있어야 확신 "나는 & 뭔가 뭔가 무엇입니까?" 그것이 내가 인코딩 설정 직전 같이 :

    NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *postData = [post dataUsingEncoding:NSNonLossyASCIIStringEncoding]; 
    NSData *postData = [post dataUsingEncoding:NSISOLatin1StringEncoding]; 
    
    다음

    의 postData에서 내 코드는 이후 다음과 같습니다 :

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding]; 
    

    을 나는 또한없는 성공을 아래의 인코딩을 시도

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding]; 
        //NSLog(@"PostData: %@", postData); 
        NSString *check = [[NSString alloc] initWithData:postData encoding:NSASCIIStringEncoding]; 
        NSLog(@"check string = %@", check); 
        NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
        [request setURL:[NSURL URLWithString:strURLQueryString]]; 
        [request setHTTPMethod:@"POST"]; 
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
        [request setHTTPBody:postData]; 
        NSURLResponse *response; 
        NSError *err=nil; 
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; 
        NSString *strResponse = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; 
        NSLog(@"Response: %@", strResponse); 
        if(err!=nil) { 
        NSLog(@"Error: %@", [err description]); 
        } 
    

    도와주세요. 귀하의 도움을 받으실 수 있습니다.

    +0

    을 문자열을 보내 ... 몇 게시물을보고 함께 % 이스케이프 자갈길 = [ post dataUsingEncoding : SOME_ENCODING];'NSString * check = [[NSString alloc] initWithData : postData encoding : SOME_ENCODING]; NSLog (@ "check string = % @", check); 그리고 그 당시 문자를 놓쳤습니까? –

    +0

    나는 결코 그것을 한 적이 없다. 그러나 당신이 그것을 언급했기 때문에 나는 그것을 시도했고 정확한 문자열을 볼 수 있었다. 나는 후속 코드를 게시 할 것이다. –

    답변

    5

    어딘가에는 아마도 더 나은 대답이있을 것입니다. 그러나이 클래스 확장은 당분간 나를 위해 일해 왔습니다. 난 당신`을 NSData * postData를했을 때 SOMER 다른 클래스의 다음

    // NSString+URLEncoding.h 
    @interface NSString (NSString_URLEncoding) 
    
    - (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding; 
    - (NSString *)urlEncode; 
    
    @end 
    
    // NSString+URLEncoding.m 
    @implementation NSString (NSString_URLEncoding) 
    
    - (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding { 
    
        return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
                        (__bridge CFStringRef)self, 
                        NULL, 
                        CFSTR("!*'();:@&=+$,/?%#[]"), 
                        encoding)); 
    } 
    
    - (NSString *)urlEncode { 
    
        return [self urlEncodeUsingEncoding:kCFStringEncodingUTF8]; 
    } 
    

    그래서 ...

    // SomeOtherClass.m 
    
    #import "NSString+URLEncoding.h" 
    
    NSString *encodedString = [@"This & this? are 'challenging' to !% encode" urlEncode]; 
    
    +0

    내가 한 일은 다음과 같습니다. 1. "NSString + URLEncoding"이라는 또 다른 클래스를 만들었습니다. 2. 나는 당신의 메소드를 .h로 선언하고 .m의 메소드를 구현했습니다. 3. 그런 다음 메서드를 호출했습니다. NSString * encodedReason = [reason urlEncode]; 4. 3을 참조하면이 오류가 발생합니다. NSMutableString의 표시 인터페이스가 선택기 'UrlEncode'를 선언하지 않습니다. 내가 놓친 게 있니? –

    +0

    'urlEncode' 메소드를 호출 할 때 새로 생성 된 클래스'NSString + URLEncoding'을 가져 왔습니까? –

    +0

    @ 루카스 에두아르 예. –

     관련 문제

    • 관련 문제 없음^_^