1

私のアプリは、php Web サービスから、データの配列を含む json 応答を受け取ります。Web サービスで配列を印刷すると、アプリで次のように表示されます。

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

出力:

[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
        )

iOS では、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 Web サービスは content-type: text/html; を返します。charset=utf-8 文字列が null に解析される理由は何ですか?

前もって感謝します!

4

2 に答える 2

0

エンコーディングをNSUTF8StringEncodingとして設定します。それはあなたの問題を解決するかもしれません。

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

于 2013-02-27T10:02:57.770 に答える
0

私は問題を理解しました。問題は、PHP Web サービスの mysql クエリで文字セットを設定しなかったことです。私のデータベースでは、照合 latin1_swedish_ci を使用しました。私のデータベースの値には、「ü」「ä」などの文字が含まれており、ios アプリでは正しくデコードできませんでした。次のステートメントでクエリを準備した後:

$query->prepare("SET CHARACTER SET utf8");

私のサービスからの応答は utf-8 エンコーディングであり、NSStrings はデフォルトで utf-8 エンコーディングを使用するため、json 応答から NSStrings を宣言するだけで済みました。

そのため、問題は文字列の不適切なエンコードに関係していました。

于 2013-02-27T13:34:56.700 に答える