2

JSON 文字列を として返す Web サーバーにクエリを実行していますNSData。文字列は UTF-8 形式なので、NSStringこのように変換されます。

NSString *receivedString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 

ただし、一部の UTF-8 エスケープが出力された JSON 文字列に残っているため、アプリの動作が不安定になります。のようなもの\u2019が紐に残ります。それらを削除して実際の文字に置き換えるためにあらゆることを試みました。

私が考えることができる唯一のことは、UTF-8 エスケープの発生を手動でその文字に置き換えることですが、より迅速な方法があれば、これは大変な作業です!

正しく解析されていない文字列の例を次に示します。

{"title":"The Concept, Framed, The Enquiry, Delilah\u2019s Number 10  ","url":"http://livebrum.co.uk/2012/05/31/the-concept-framed-the-enquiry-delilah\u2019s-number-10","date_range":"31 May 2012","description":"","venue":{"title":"O2 Academy 3 ","url":"http://livebrum.co.uk/venues/o2-academy-3"}

ご覧のとおり、URL は完全には変換されていません。

ありがとう、

4

1 に答える 1

7

この\u2019構文は UTF-8 エンコーディングの一部ではなく、JSON 固有の構文の一部です。NSStringJSONではなくUTF-8を解析するため、理解できません。

NSJSONSerializationJSON を解析し、その出力から必要な文字列を取得するために使用する必要があります。

たとえば、次のようになります。

NSError *error = nil;
id rootObject = [NSJSONSerialization
                      JSONObjectWithData:receivedData
                      options:0
                      error:&error];

if(error)
{
    // error path here
}

// really you'd validate this properly, but this is just
// an example so I'm going to assume:
//
//    (1) the root object is a dictionary;
//    (2) it has a string in it named 'url'
//
// (technically this code will work not matter what the type
// of the url object as written, but if you carry forward assuming
// a string then you could be in trouble)

NSDictionary *rootDictionary = rootObject;
NSString *url = [rootDictionary objectForKey:@"url"];

NSLog(@"URL was: %@", url);
于 2012-05-31T17:39:10.987 に答える