2011-09-15 11 views
0

私はこの1つについて非常に明確な答えを見ていません。何らかの理由で私は理解できません。データを受け取っているサーバーは、最初にヌルバイトの(おそらく何百という)たくさんのJSON応答を返します。NSStringからのNSString - サーバーは先行するヌルでNSDataを返します

私は次のコードを使用すると、文字列がnullのように見えます:

NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease]; 

これは明らかに共通の問題であるが、私はNSStringのへのNSDataを変換する方法について明確な答えを見ていません。

最近まで、この問題は中間的なNSString値でわかりましたが、最初から最後まで数え切れないほどの文字を取り除いた後に消えました。ストリップ後のNSStringは完全にうまくいきました。だから、エンコーディング方法は問題ではないと思います。

これを正しく行うための組み込みメソッドはありますか?私はそれがバイトごとに行くコードを書くことがより効率的であることをイメージングする必要があります。

ちなみに、ブラウザのサーバーにJSONリクエストを手動で送信すると、応答は完全に有効なJSONとして返され、ブラウザ画面に明らかな問題は表示されません。

私は何をすべきですか?ありがとう。

+0

なぜこれが一般的な問題であると思われますか?他にどこを見たことがありますか?サーバーからのJSONレスポンスが正常であることをフィドラー(または同様のツール)で確認しましたか? _dataToBeLoaded_の内容は何ですか?完全なJSONレスポンスか、JSONレスポンスの一部ですか?詳細をご記入ください。 – Codo

+0

この質問をもう一度読んだところ、サーバーの部分は固定されていて、iOSまたはMac OSクライアントではないことが明らかです。あなたはサーバーを修正することができますか、それとも誰かの責任ですか?とにかくどのサーバー技術が使われていますか? – Codo

+0

何百万人ものプログラマの世界では一般的なのかどうか分かりませんが、実際の答えは何度か見たことがあります。サーバーは私の管理下にはありません。私はこの2つのサーバーからこれを見てきました。私は私のアプリケーションに便利だとわかった解決策を使って、私の質問に答えます。 – Jim

答えて

0

各サーバーから返されるデータには有効なJSON(多くの場合、JSON Lintで検証済み)が含まれています。あるケースでは、戻りデータはJSONオブジェクトを含むjavascript代入文です。別のケースでは、単なるJSONオブジェクトです。どちらの場合も、JSONオブジェクトは中括弧で始まることがわかります。

先行するすべてのヌルを取り除くには、以下のコードを使用します。いくつかのメソッドはCの文字列のようにNSStringの文字列データを扱うようですが、他の方法では長さの認識を含むもっと多くの方法があることを認識しています。幸いなことに、rangeOfStringsubstringFromIndexは先頭のヌルを超えて見えます。

NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease]; 

if (newStr == nil) return; 

NSRange headRange = [newStr rangeOfString:@"{"]; 
NSString *stripped = [newStr substringFromIndex:headRange.location]; 
関連する問題