我有这个非常简单的代码:
PO(URLString);
url = [NSURL URLWithString:URLString];
PO(url);
NSData * data=[NSData dataWithContentsOfURL:url];
(PO()
是我打印东西的宏。)
大部分时间都有效。这是输出:
2012-10-08 11:39:28.187 BadgerNew[2475:5007] <0x1f5321f0 BGCRBusinessForDisplay.m:(113)> URLString: http://id.openrice.com/UserPhoto/photo/0/U/0005Z29E131A230CBA4A42n.jpg
2012-10-08 11:39:28.193 BadgerNew[2475:5007] <0x1f5321f0 BGCRBusinessForDisplay.m:(115)> url: http://id.openrice.com/UserPhoto/photo/0/U/0005Z29E131A230CBA4A42n.jpg
2012-10-08 11:39:30.191 BadgerNew[2475:6b03] <0x1f529f00 BGCRBusinessForDisplay.m:(113)> URLString: http://maps.googleapis.com/maps/api/staticmap?&zoom=16&size=160x160&maptype=roadmap&sensor=true¢er=-6.187900,106.775429&markers=size:small|color:blue|-6.187900,106.775429
2012-10-08 11:39:30.196 BadgerNew[2475:6b03] <0x1f529f00 BGCRBusinessForDisplay.m:(115)> url: (null)
如您所见,它适用于http://id.openrice.com/UserPhoto/photo/0/U/0005Z29E131A230CBA4A42n.jpg,并且在http://maps.googleapis.com/maps/api/staticmap?&zoom=16&size=160x160&maptype=roadmap&sensor=true¢er=-6.187900,106.775429&markers=size:small|color:blue|-6.187900,106.775429
上失败也许问题是|在Google网址中。那我该怎么办呢?
答案 0 :(得分:6)
你是对的,|
(“管道”)就是问题。
Apple docs for URLWithString:
表示相关的外部文档是RFC 2396和1738。据他们说,|
是一个“不安全”的字符,必须始终在URL中编码。它的编码是%7C
。
您可以手动更正字符串中的管道(如果它是硬编码字符串),但更好的解决方案是使用-[NSString stringByAddingPercentEscapesUsingEncoding:]
替换它们和任何其他有问题的字符。
答案 1 :(得分:0)
我找到了自己的解决方案。
Yap the是问题。
所以,我这样做:
URLString = URLString.UTF8Encode;
UTF8Encode定义如下:
- (NSString *)UTF8Encode
{
NSString* encodedstring = [self stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return encodedstring;
}
是的,这是一个类别:D