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¶ms=%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¶ms=%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¶ms=%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¶ms=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¶ms=%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¶ms=%7B%22competition_id%22%3A",linkId, @"%7D"];
【讨论】:
以上是关于stringWithFormat 和 % 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
何时使用 NSString stringWithFormat;
NSString - stringWithFormat 自动释放
NSString stringWithFormat 无法添加反斜杠