首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURL withString添加胡言乱语

NSURL withString添加胡言乱语
EN

Stack Overflow用户
提问于 2012-07-25 14:37:59
回答 2查看 135关注 0票数 0

我正在尝试使用路径字符串构建一个NSURL。这个字符串看起来很好,但是当我尝试把它放到NSURL中时,它会产生一堆乱七八糟的东西。下面是我用来构建url的代码:

代码语言:javascript
复制
NSString* path = [[AppSettings instance].contentRootPath stringByAppendingPathComponent: item.fileName];
NSLog(path);
item.contentPath = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(item.contentPath.absoluteString);

这是原木:

2012-07-25 10:28:39.983 mxHub44036:207 /Users/casey.bbs/Library/Application Support/iPhone Simulator/5.0/Applications/C2C1975D-7FAB-4E6C-A091-DC389223CC57/Documents/.content/PREZISTA-PI.pdf 2012-07-25 10:28:41.654 mxHub44036:207 /Users/casey.bbs/Library/Application扡潳畬整瑓楲杮䄀䅖獳瑥慃档e獡敳䍴捡敨楗桴剕㩌猀穩佥䕦瑮祲潆䭲祥:ㅱ䀲㨰䀴8敲潭敶湅牴䙹牯敋㩹挀牵敲瑮楓敺猀瑥慍䕸瑮祲楓敺:慭䕸瑮祲楓敺猀瑥慍卸穩㩥洀硡楓敺䀀䄢䅖獳瑥慃档䥥瑮牥慮≬䄀䅖獳瑥慃档䥥瑮牥慮l湩瑩楗桴楄瑣潩慮祲:慤慴獕湩䕧据摯湩㩧污潬䱷獯祳潃癮牥楳湯:慣䉮䍥湯敶瑲摥潔湅潣楤杮:湩瑩楗桴慄慴攺据摯湩㩧攀瑸湥敤䱤杯慄慴瑓楲杮湅潣楤杮攀瑸湥敤䱤杯慄慴䄀偖慬敹䥲整䅭捣獥䱳杯开捡散獳潌䅧牲祡攀敶瑮s灟慬敹䥲整䅭捣獥䱳杯䀀䄢偖慬敹䥲整䅭捣獥䱳杯湉整湲污"噁汐祡牥瑉浥捁散獳潌䥧瑮牥慮l潬䅧牲祡䄀偖慬敹䥲整䅭捣獥䱳杯癅湥t畮扭牥晏牄灯数噤摩潥牆浡獥椀摮捩瑡摥楂牴瑡e扯敳癲摥楂牴瑡e畮扭牥晏祂整味慲獮敦牲摥渀浵敢佲卦慴汬s畤慲楴湯慗捴敨d敳浧湥獴潄湷潬摡摥畄慲楴湯瀀慬批捡卫慴瑲晏獦瑥瀀慬批捡卫獥楳湯䑉渀浵敢佲卦牥敶䅲摤敲獳桃湡敧s敳癲牥摁牤獥s剕I汰祡慢正瑓牡䑴瑡e畮扭牥晏敓浧湥獴潄湷潬摡摥开汰祡牥瑉浥捁散獳潌䕧敶瑮䀀䄢偖慬敹䥲整䅭捣獥䱳杯癅湥䥴瑮牥慮≬吀ⱤⱒN噁汐祡牥瑉浥捁散獳潌䕧敶瑮湉整湲污搀捩t┊@噁汐祡牥瑉浥牅潲䱲杯开牥潲䱲杯牁慲y灟慬敹䥲整䕭牲牯潌g≀噁汐祡牥瑉浥牅潲䱲杯湉整湲污"噁汐祡牥瑉浥牅潲䱲杯湉整湲污䄀偖慬敹䥲整䕭牲牯潌䕧敶瑮攀牲牯潃浭湥t牥潲䑲浯楡n牥潲卲慴畴䍳摯e灟慬敹䥲整䕭牲牯潌䕧敶瑮䀀䄢偖慬敹䥲整䕭牲牯潌䕧敶瑮湉整湲污"噁汐祡牥瑉浥牅潲䱲杯癅湥䥴瑮牥慮l椀剳捥牯楤杮攀牲牯楗桴潄慭湩挺摯㩥獵牥湉潦:潶捩䍥湯牴汯敬䕲摮汐祡慢正湉整牲灵楴湯:潶捩䍥湯牴汯敬䕲摮敒潣摲湉整牲灵楴湯:潶捩䍥湯牴汯敬偲慬批捡䉫晵敦䅲慶汩扡敬戺晵敦㩲瘀楯散潃瑮潲汬牥楄卤慴瑲汐祡湩㩧畳捣獥晳汵祬:upport/iPhone畳捣獥晳汵祬

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-25 14:51:43

这与NSLog有关,与urls无关:)

试试这个:

代码语言:javascript
复制
NSString* path = [[AppSettings instance].contentRootPath stringByAppendingPathComponent: item.fileName];
NSLog(@"%@", path);
item.contentPath = [NSURL URLWithString:[path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"%@", item.contentPath.absoluteString);

NSLog的第一个参数是一个格式字符串--这告诉NSLog,可能还有其他值要插入到输出中(这些是NSLog接受的其他可选参数--例如,NSLog(@"%i", 5);将用5替换%i )。

NSLog(path);很好,因为路径中没有任何特殊的格式化字符,所以它会像您预期的那样输出。

第二个NSLog中有%字符-当您请求%转义路径时添加了它们:)例如,您用%20替换了'Application‘中的空格。

这意味着您的url现在包含格式代码%20S (S是空格后面的下一个字符,是单词‘Support’中的第一个字符)。

%SNSLog解释为‘接受给我的下一个参数,并将它当作一个以空结尾的c-字符串’。

不幸的是,您没有给NSLog提供另一个参数:)但是,NSLog不知道--它只是尽职尽责地按照它的要求做了,并将堆栈上的下一个值添加到输出字符串中。

堆栈上的下一个值是垃圾,这就是为什么输出是垃圾的原因!

您可以看到损坏的值出现,而不是路径中的空格-这两个空格恰好后面跟着一个S,因此NSLog正在两处倾倒垃圾。这就是为什么在第一次装载垃圾之后,您可以看到'upport/iPhone‘,在第二个'imulator/5.0’之后:)

票数 4
EN

Stack Overflow用户

发布于 2012-07-25 14:51:35

使用NSLog( string )时,该字符串将被视为格式语句,任何'%‘字符都将被解释。

尝试使用以下形式打印字符串:NSLog(@%@,string)。作为一个一般性的陈述,你应该始终使用上面的表格,而不是你正在使用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11652226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档