2013-02-27 2 views
1

내 응용 프로그램은 데이터 배열을 포함하여 내 PHP 웹 서비스에서 json 응답을 수신합니다. webservice에서 배열을 인쇄하면 잘 보이는 내 응용 프로그램에서 다음을 받게됩니다.ios JSON이 문자열 값을 구문 분석합니다. <null>

NSLog(@"data: %@", [[NSString alloc] initWithData:downloaddata encoding:NSASCIIStringEncoding]); 

출력 : 아이폰 OS

[0] => Array 
     (
      [id] => 3 
      [title] => some title //MySQL varchar(60), utf8_unicode_ci 
      [description] => some description //MySQL text, utf8_unicode_ci 
      [type] => AUDIO //MySql enum 
      [created] => 2013-02-25 00:00:00 
      [edited] => 2013-02-25 00:00:00 
      [version] => 1 
      [courserooms_id] => 1 
     ) 

    [1] => Array 
     (
      [id] => 4 
      [title] => some other title 
      [description] => some other description 
      [type] => MOVIE 
      [created] => 2013-02-12 00:00:00 
      [edited] => 2013-02-14 00:00:00 
      [version] => 1 
      [courserooms_id] => 1 
     ) 

제가 NSJSONSerialization를 이용하여 수신 된 데이터를 분석.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 

    NSError* error; 
    NSDictionary* json = [NSJSONSerialization 
          JSONObjectWithData:downloaddata 

          options:kNilOptions 
          error:&error]; 
    NSLog(@"error: %@", [error localizedDescription]); 

    NSLog(@"json: %@", json); 
} 

출력 : 출력에서 ​​

배열의 문자열 값이 null이며, 내가 왜 잘 모릅니다.

{ 
      "courserooms_id" = 1; 
      created = "2013-02-25 00:00:00"; 
      description = "<null>"; 
      edited = "2013-02-25 00:00:00"; 
      id = 3; 
      title = "<null>"; 
      type = AUDIO; 
      version = 1; 
     }, 
       { 
      "courserooms_id" = 1; 
      created = "2013-02-12 00:00:00"; 
      description = "<null>"; 
      edited = "2013-02-14 00:00:00"; 
      id = 4; 
      title = "<null>"; 
      type = MOVIE; 
      version = 1; 
     } 

내 php webservice는 content-type : text/html을 반환합니다. charset = utf-8 문자열이 null로 구문 분석되는 이유는 무엇입니까?

미리 감사드립니다.

+1

이 웹 사이트에서 JSON을 확인해보십시오. http://jsonlint.com/ JSON 코드와 유효성 검사를 붙여 넣기 만하면됩니다. – HernandoZ

답변

0

문제점을 파악했습니다. 문제는 PHP 웹 서비스의 mysql 쿼리에서 charset을 설정하지 않았다는 것입니다. 내 데이터베이스에서 나는 데이터 정렬 latin1_swedish_ci를 사용했습니다. 내 DB에있는 값은 'ü' 'ä'등등과 같은 일부 문자가 포함되어 있습니다.이 iOS 앱에서는 올바르게 디코딩 할 수 없습니다. 다음 문을 내 쿼리를 준비한 후 :

$query->prepare("SET CHARACTER SET utf8"); 
내 서비스의 응답이 UTF-8 인코딩, 그리고 NSStrings 기본적으로 UTF-8 인코딩을 사용하기 때문에 난 그냥, JSON 응답에서 NSStrings을 선언 할 수

.

따라서 문제는 문자열의 잘못된 인코딩과 관련이 있습니다.

0

인코딩을 NSUTF8StringEncoding으로 설정하십시오. 그것은 당신의 문제를 해결할 수 있습니다.

NSLog (@ "data : % @", [[NSString alloc] initWithData : 다운로드 데이터 인코딩 : NSUTF8StringEncoding]);