NSMutableDataが無効である理由をどのように見つけますか
-
20-09-2019 - |
質問
私は、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パーサーでブラウザを介して戻って与えられたJSONをレンダリングします。それは罰金をチェックアウトします。
結果はURLにIDを入力することにより、バック与えられています。他のIDは問題なく結果を返します。結果セットがかなり大きいます。
解決
まず、私はセットアップにNSStringのをinitWithData:encoding:
を使用します。小さな違いが、その方法は、理由があります。
そこで、私はそこに実際にあるものを見るためにself.receivedData
のhexdumpに対してを行うだろう。そのデータが正しくUTF8でエンコードされていない場合は、initWithData:encoding:
は失敗します。
(グーグルのNSDataのための進ダンプがこれを行うには他の人のユーティリティ機能を見つけるために)
私は時々、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サービスが書かれたか、正しく設定されていません。
他のヒント
バイトを見てNSLog
を使用します。
所属していません StackOverflow