0

RESTFUL URLにアクセスして、結果を取得します。結果はJSONです。次の方法で応答を文字列に変換します。

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

json変数の値は0x0です。その上にマウスを置くと、<Invalid CFStringRef>が表示されます。これをデバッグして、なぜ無効なのかを判断するにはどうすればよいですか?ブラウザーから返されたJSONをAJSONパーサーでレンダリングします。それはうまくチェックアウトします。

URLにIDを入力すると、結果が返されます。他のIDは問題なく結果を返します。結果セットはかなり大きいです。

4

2 に答える 2

2

まずinitWithData:encoding:、NSStringの設定に使用します。わずかな違いですが、その方法には理由があります。

次に、self.receivedData実際にそこに何があるかを確認するために、の16進ダンプを実行します。そのデータが適切にUTF8エンコードされていない場合、initWithData:encoding:は失敗します。

(これを行うための他の人のユーティリティ関数を見つけるためのNSData 16進ダンプのGoogle)

Webサービスのエンコーディングがお粗末な場合があることがわかりました。したがって、私は通常、次のようなフォールバックを実装します。

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

これが必要なのは悲しいことですが、多くのWebサービスが適切に作成または構成されていません。

于 2010-03-14T23:40:39.470 に答える
1

NSLogバイトを確認するために使用します。

于 2010-03-14T23:20:45.670 に答える