我有问题让我发疯。我的API提供商的网址带有变音符号,例如:
NSString *url = @"http://apiprovideraddress.com/user?param_id=sdn-ło-13/z" // ł - diacritic sign
如果在url地址中存在任何变音符号,则“AFNetworking”将返回此函数NSParameterAssert
,该函数会破坏代码:
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
error:(NSError *__autoreleasing *)error
NSParameterAssert(URLString) //URLString = nil
堆栈:
[AFHTTPRequestSerializer requestWithMethod:URLString:parameters:error:]
[AFHTTPRequestOperationManager GET:parameters:success:failure:]
我正在使用此功能来“获取”:
[myManager GET:url parameters:nil success:failure:];
如果“网址”没有变音符,那么一切正常。有什么想法吗?
答案 0 :(得分:2)
来自RFC 3986:当新的URI方案定义表示由通用字符集[UCS]中的字符组成的文本数据的组件时,应首先根据UTF-8字符编码将数据编码为八位字节[STD63] ;那么只有那些与未保留集中的字符不对应的八位字节应该是百分比编码。例如,字符A将表示为“A”,字符LATIN CAPITAL LETTER A WITH GRAVE将表示为“%C3%80”,字符KATAKANA LETTER A将表示为“%E3%82%A2 ”。
使用stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
对网址进行编码,使用UTF-8非ASCII字符做正确的事情。
示例:
NSString *urlString = @"http://apiprovideraddress.com/user?param_id=sdn-ło-13/z"; // ł - diacritic sign
NSLog(@"urlString: %@", urlString);
NSString *s = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"s: %@", s);
NSLog输出:
urlString:http://apiprovideraddress.com/user?param_id=sdn - ło-13 / z
s:http://apiprovideraddress.com/user?param_id=sdn-%C5%82o-13/z
注意:已知stringByAddingPercentEscapesUsingEncoding:
省略了一些可选的转义。
对此特定网址的更保守的回答是:
http%3A%2F%2Fapiprovideraddress.com%2Fuser%3Fparam_id%3Dsdn-%C5%82o-13%2Fz
答案 1 :(得分:0)
答案 2 :(得分:0)
这些是请求的参数,您可以在parameter
参数中传递它们,作为NSDictionary
类似
@{
@"param_id" : @"sdn-ło-13/z"
}