首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >目标-c URL编码Cloudstack

目标-c URL编码Cloudstack
EN

Stack Overflow用户
提问于 2014-01-28 11:48:43
回答 1查看 372关注 0票数 0

我正在开发一个IOS应用程序,它需要与API (CloudStack)通信。API要求对每个请求进行签名。

我需要URL编码参数,并创建一个HMAC SHA1哈希。在我传递包含加号或冒号的参数之前,一切都很好。

因此,我想是我的应用程序中的URL编码部分不能正常工作。我已经搜索了几个网站,并尝试了提供的解决方案,但没有任何结果。

API规范之一是,所有空格都需要编码为"%20“,而不是"+”。

API签名指南:Guide/signing-api-requests.html

目前,我正在使用以下代码对URL进行URL编码:

代码语言:javascript
复制
-(NSString *)urlenc:(NSString *)val
{    
    NSString *result = [(NSString *)val stringByReplacingOccurrencesOfString:@"+" withString:@" "];
    result = [result stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
    return result;
}

我像这样调用这个方法:[self urlenc@"2014-01-20T14:02:48+0100"]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 12:03:50

在您的例子中,问题可能是stringByAddingPercentEscapesUsingEncoding不编码的"+“和":”字符。

您需要使用支持更多字符的编码器,有关更多完整信息,请参见this SO answer

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding编码14个字符:

`#%^{}[]\“<>加上百分比转义的空格字符。

下面是示例代码(iOS7和更高版本,否则请参见this SO answer):

您可能需要更改编码的字符。

代码语言:javascript
复制
NSString *testString = @"2014-01-20T14:02:48+0100";
NSString *encodedString1 = [testString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"encodedString1: %@", encodedString1);

NSString *charactersToEscape = @"!*'();:@&=+$,/?%#[]\" ";
NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
NSString *encodedString2 = [testString stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
NSLog(@"encodedString2: %@", encodedString2);

NSLog输出:

代码语言:javascript
复制
encodedString1: 2014-01-20T14:02:48+0100
encodedString2: 2014-01-20T14%3A02%3A48%2B0100
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21404838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档