在检查其他人如何尝试在Cocoa中进行URL编码(如How do I URL encode a string,Swift - encode URL等)后,我仍然不知道如何在Cocoa中正确进行URL编码
捕获22:
stringByAddingPercentEscapesUsingEncoding:
懒惰转换,因此首选方法是逐个使用stringByAddingPercentEncodingWithAllowedCharacters:
每个网址组件
[NSURL URLWithString:]
,[NSURLComponents componentsWithString:]
,如果传入的字符串不是(至少部分地)编码,则同伴会失败,但如果我传递的stringByAddingPercentEscapesUsingEncoding:
编码字符串不是组件拆分将失败(fe编码的#将混淆分割器,片段将被视为可能的查询部分
在这种情况下如何正确编码URL而不编写我自己的URL解析器,编码器?
答案 0 :(得分:2)
您应该阅读本主题的所有Apple's release note discussion,但特别是此部分可能与您的案例最相关:
如果您需要对整个URL字符串进行百分比编码,则可以使用此字符串 用于编码NSString的代码(在urlStringToEncode中):
NSString *percentEncodedURLString = [[NSURL URLWithDataRepresentation:[urlStringToEncode dataUsingEncoding:NSUTF8StringEncoding] relativeToURL:nil] relativeString];
(CoreFoundation相当于URLWithDataRepresentation:是 CFURLCreateWithBytes()使用编码kCFStringEncodingUTF8和 如果kCFStringEncodingUTF8,则回退到kCFStringEncodingISOLatin1 失败。)
基本上,+URLWithDataRepresentation:relativeToURL:
会尽力从提供的字节中生成正确的URL。鉴于你几乎无法保证任何关于输入的内容,所以它不会有任何承诺它会得到它"对" (因为"右边"在这种情况下没有明确定义),但它可能是你最好的希望。