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) 就在 and 被替换为 (448) 提前谢谢。

4

2 回答 2

3

这是因为格式字符串中的所有这些%字符都可能被用于使用格式参数,就像%@(有关详细信息,请参见此处)。

这可以看出(例如),其中:

callback_params=%7B%22date

转化为:

callback_params=7                 37040ate

在这种情况下,我不确定它在%7B做什么,因为它不是一个有效的格式说明符,但它%22date会产生一个 22 个字符的十进制值,从 开始%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 回答