iOS:NSASCIIStringEncoding不';t对某些字符进行正确编码
我有一个要从中请求数据的url。这是代码iOS:NSASCIIStringEncoding不';t对某些字符进行正确编码,ios,objective-c,request,Ios,Objective C,Request,我有一个要从中请求数据的url。这是代码 urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding]; ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlStr]]; 除非我有某些字符,如ş,否则此选项有效。urlstr将返回null。有没有办法避免某些字
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:
NSASCIIStringEncoding];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlStr]];
除非我有某些字符,如
ş
,否则此选项有效。urlstr将返回null。有没有办法避免某些字符类型?任何提示或建议都将不胜感激。我在许多应用中成功地使用了以下方法:
- (NSString *)urlEncode:(NSString *)str {
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)str, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8));
}
请注意,我仅在URL的参数上使用此选项,因此以下选项将起作用(注意,我添加了ş,这似乎起作用,尽管我不熟悉该字符):
这将产生以下结果:
ASCII只能处理1-127范围内的Unicode字符<代码>ş不是ASCII字符。它是“除”而不是“接受”。Grr@Mathew很抱歉这是我愚蠢的错误。这基本上是Google在Mac代码的Google工具箱中使用的方法,所以我认为它是有效的。看见
NSString *baseURL = @"http://www.google.com";
NSString *paramsString = @"testKey=test value_with some (weirdness)!___ş";
NSString *resultingURLString = [NSString stringWithFormat:@"%@?%@", baseURL, [self urlEncode:paramsString]];