url中的iOS特殊字符

时间:2014-04-03 16:07:14

标签: objective-c ios7 restkit afnetworking

我尝试拨打api电话:

api.app.com/foo/search/Öhm

其中Öhm是搜索词。问题是这个url会导致错误的url异常,而普通的chars工作正常。我试过

[searchText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

然而,这会产生很多%的迹象。 api期待Öhm。解决这个问题的任何方法?我正在使用restkit。

完整错误:

  

错误域= NSURLErrorDomain代码= -1000“错误的URL”UserInfo = 0x16e719d0   {NSUnderlyingError = 0x16d70d10“bad URL”,NSLocalizedDescription = bad   URL} 2014-04-03 18:26:55.404我的应用程序[6844:3807] E.   restkit.network:RKObjectRequestOperation.m:243 GET'(null)'(0/0   对象)[request = 0.0084s mapping = 0.0000s total = 0.0769s]:错误   Domain = NSURLErrorDomain Code = -1000“bad URL”UserInfo = 0x16e719d0   {NSUnderlyingError = 0x16d70d10“bad URL”,NSLocalizedDescription = bad   URL}

终点是(null)而不是Öhm。

代码:

[[ApiSearchManager sharedManager] search:^(NSArray *result){
    //handle success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    //handle fail - it fails for Öhm
} query:searchTerm];

并在较低级别:

- (void) search:(void (^)(NSArray *))success failure:(void (^)(RKObjectRequestOperation *, NSError *))failure query:(NSString *)query{

    [self getObjectsAtPath:[NSString stringWithFormat:@"foo/search/%@", query] parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        if (success) {
            success(mappingResult.array);
        }
    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        if (failure) {
            failure(operation, error);
        }
    }];
}

2 个答案:

答案 0 :(得分:3)

%符号是转义,而 应该如何传输URL。在服务器端,URL被解释(未转义),服务器端代码将按预期看到特殊字符。例如,在其中看到带有%20的URL是很常见的。 ASCII字符20(十六进制)是一个空格,因此获取URL(适当解码)的服务器端代码在那里看到一个空格。

答案 1 :(得分:1)

日志的这一部分:

GET '(null)' (0 / 0 objects) [request=0.0084s mapping=0.0000s total=0.0769s]:

意味着您正在执行GET,请求网址为nil(这会很糟糕),因此获取了状态代码,因为实际上没有发送任何请求,花了一点时间,等等等等

因此,URL加载系统无法创建用于发出请求的有效URL。

我猜你唯一能做到这一点的方法是在baseURL中没有正确配置RKObjectManager。检查一下。 (虽然我希望早点失败 - 所以你可能会在RKObjectRequestOperation.m,第243行调试,并备份调用堆栈)