2014-09-05 117 views
0

我有我要从中请求数据的网址。这是代码。iOS:NSASCIIStringEncoding不能正确编码某些字符

urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding: 
NSASCIIStringEncoding]; 

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:urlStr]]; 

这有效,除非我有某些字符,如ş。 urlstr将返回null。有没有办法解决某些字符类型?任何提示或建议表示赞赏。

+1

ASCII只能处理1-127范围内的Unicode字符。 'ş'不是一个ASCII字符。 – rmaddy 2014-09-05 20:56:31

+0

这是“除了”而不是“接受”。格儿。 – w0mbat 2014-09-05 23:56:37

+0

@Mathew对不起,这是我的愚蠢的错误。 – user3606054 2014-09-06 00:01:54

回答

1

我用下面的方法在许多应用中的成功:

- (NSString *)urlEncode:(NSString *)str { 
    return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)str, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), kCFStringEncodingUTF8)); 
} 

请注意,我用这对 URL的参数,可以使下面将工作(注意我说的S ,这似乎工作,虽然我不熟悉的字符):

NSString *baseURL = @"http://www.google.com"; 
NSString *paramsString = @"testKey=test value_with some (weirdness)!___ş"; 
NSString *resultingURLString = [NSString stringWithFormat:@"%@?%@", baseURL, [self urlEncode:paramsString]]; 

其产生的结果:

http://www.google.com?testKey%3Dtest%20value_with%20some%20%28weirdness%29%21___%C5%9F

+0

这基本上是Google在Google Toolbox for Mac代码中使用的方法,因此我认为它适用。请参阅https://github.com/adamotte/googleplus-ios-sdk/blob/master/OpenSource/GTMNSString%2BURLArguments.m – w0mbat 2014-09-06 00:04:12