stringWithFormat 和 % 不起作用

Posted

技术标签:

【中文标题】stringWithFormat 和 % 不起作用【英文标题】:stringWithFormat and % not working 【发布时间】:2012-07-31 02:47:23 【问题描述】:

我有这个字符串

 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 

所以 and 处的值 (721) 被替换为 (448) 提前致谢。

【问题讨论】:

【参考方案1】:

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

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

callback_params=%7B%22date

转化为:

callback_params=7                 37040ate

在这种情况下,我不确定 %7B 正在做什么,因为它不是有效的格式说明符,但 %22date 会产生一个 22 字符的十进制值,来自 %22d,后跟文字ate

如果您想在输出字符串中使用单个 %,则需要在格式字符串中使用 %%

【讨论】:

【参考方案2】:

另一种看待它的方式是,您作为格式字符串提供的东西实际上是数据,而不是纯粹的格式。

为了避免这些虚假转换,您需要:

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"];

【讨论】:

以上是关于stringWithFormat 和 % 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

何时使用 NSString stringWithFormat;

NSString - stringWithFormat 自动释放

stringWithFormat 问题[关闭]

NSString stringWithFormat 无法添加反斜杠

NSString stringWithFormat 添加了“ffffff”

Xamarin.iOS 中 NSString stringWithFormat 的等价物是啥