0

私はこの文字列を持っています

 NSString *jsonString = @"http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A721%7D";
 NSLog(@"%@",jsonString);

the output is 

http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A721%7D

私が使うとき

 NSString *linkId = @"448";//not a constant value only for example 
 NSString *jsonString = [NSString stringWithFormat:@"http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A%@%7D",linkId];

 the output is 

http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=7                 37040ate23A222㿠                 37040isplay23A0x1.21800000507cp-1027ll27D&action=showMatches&params=7                     –ompetition_id23A(null)      0

ご覧のとおり、同じではありません。私の質問は、stringWithFormat を使用してこの結果を取得する方法です。

  http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A448%7D 

したがって、値 (721) は (448) に置き換えられます。

4

2 に答える 2

3

これは、フォーマット文字列内のすべての%文字が、フォーマット引数を使用するために使用されている可能性があるためです%@(詳細については、ここを参照してください)。

これは(一例として)ここで見ることができます:

callback_params=%7B%22date

に変換されます:

callback_params=7                 37040ate

その場合、%7B有効なフォーマット指定子ではないため、が何をしているのかわかりませんが、%22dateは22文字の10進値であり%22d、その後にリテラルが続きateます。

出力文字列に%%シングルが必要な場合は、フォーマット文字列で使用する必要があります。%

于 2012-07-31T02:52:30.263 に答える
1

別の見方をすれば、フォーマット文字列として与えているのは、純粋なフォーマットではなく、実際にはデータであるということです。

これらの偽の変換から安全にするには、次のことが必要です。

NSString *jsonString = [NSString stringWithFormat:@"%@%@%@", @"http://www.soccerway.com/a/block_home_matches?block_id=block_home_matches_14&callback_params=%7B%22date%22%3A%222012-07-31%22%2C%22display%22%3A%22all%22%7D&action=showMatches&params=%7B%22competition_id%22%3A",linkId, @"%7D"];
于 2012-07-31T02:56:17.303 に答える