【问题标题】:String encode in objective c目标c中的字符串编码
【发布时间】:2016-07-20 22:45:02
【问题描述】:

我是 Objective-C 的新手。

我想获取 NSString 的编码内容。在java中我可以这样做,

String str = "https://www.google.co.in/#q=ios+sqlite+crud+example";
String encodedParam = URLEncoder.encode(str, "UTF-8");

我正在使用http://www.tutorialspoint.com/compile_objective-c_online.php 来测试在stackoverflow 中发布的代码。目前还没有解决办法。我知道它是微不足道的。不过正在努力寻找方法。

尝试了以下功能,编译时提示以下错误,

-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
       (CFStringRef)self,
       NULL,
       (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
       CFStringConvertNSStringEncodingToEncoding(encoding));

}

错误,

    sh-4.3$ gcc `gnustep-config --objc-flags` -L/usr/GNUstep/System/Library/Libraries -lgnustep-base -lobjc *.m -o main                                                             
    main.m: In function 'main':                                                                                                                                                     
    main.m:7:14: error: 'urlEncodeUsingEncoding' undeclared (first use in this function)                                                                                            
     -(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {                                                                                                               
                  ^                                                                                                                                                                 
    main.m:7:14: note: each undeclared identifier is reported only once for each function it appears in                                                                             
    main.m:7:36: error: expected ';' before ':' token                                                                                                                               
     -(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {   

根据答案进行编辑,

Patrick 建议,我使用的代码如下,

NSString *storedURL = @"google.com/?search&q=this";
NSString *urlstring = [NSString stringWithFormat:@"http://%@/",storedURL];
NSURL *url = [NSURL URLWithString:urlstring];

NSError *error = nil;
NSStringEncoding encoding;
NSString *my_string = [[NSString alloc] initWithContentsOfURL:url
                                                 usedEncoding:&encoding 
                                                        error:&error];
NSLog (my_string);

控制台中没有打印任何内容...是我的 NSLog 是对的吗?

由 lightwolf 建议,我的代码如下所示,

NSString *str = @"https://www.google.co.in/#q=ios+sqlite+crud+example";
NSString *encodedParam = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog (encodedParam);

它打印日志,但值与 str 相同.....未编码...我希望这个 str 为

https%3A%2F%2Fwww.google.co.in%2F%23q%3Dios%2Bsqlite%2Bcrud%2Bexample

【问题讨论】:

  • stringByAddingPercentEscapesUsingEncoding 仅对与 URL 编码不兼容的字符进行编码。 “+”是一个可接受的字符(它表示空格),所以它没有被编码。顺便说一句,要在控制台中打印,您应该使用 NSLog(@"%@", string)
  • 为什么不使用NSURL 对象?

标签: ios objective-c encode


【解决方案1】:

如果你想编码你应该使用的特定范围的字符

NSString *str = @"https://www.google.co.in/#q=ios+sqlite+crud+example";
NSString *encodedParam = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet alphanumericCharacterSet]];
NSLog (@"%@", encodedParam);

注意invertedSet;这样,您将编码除指定集合(所有字母数字字符)之外的所有字符

结果是

https%3A%2F%2Fwww%2Egoogle%2Eco%2Ein%2F%23q%3Dios%2Bsqlite%2Bcrud%2Bexample

如果你想使用一组特定的字符,你应该使用

NSString *str = @"https://www.google.co.in/#q=ios+sqlite+crud+example";
NSCharacterSet* set = [NSCharacterSet characterSetWithCharactersInString:@"!*'();@&=+$,?%#[]"];
NSString *encodedParam = [str stringByAddingPercentEncodingWithAllowedCharacters:[set invertedSet]];
NSLog (@"%@", encodedParam);

在这种情况下,我故意错过了 /: 所以结果是

https://www.google.co.in/%23q%3Dios%2Bsqlite%2Bcrud%2Bexample

【讨论】:

  • 请编辑您的原始答案而不是发布另一个答案,除非两个答案都是针对同一问题的两个解决方案。
【解决方案2】:

也许这就是你想要的

NSString *str = @"<html><head><title>First</title></head><body><p>Parsed HTML into a doc.</p></body></html>";
NSString *encodedParam = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

你必须只编码参数,当然不是整个 URL

【讨论】:

  • lightwolf,用你的回答更新了我的问题。请看一下。
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
相关资源
最近更新 更多