当前位置: 首页 > 面试题库 >

Objective-C和Swift URL编码

隆安然
2023-03-14
问题内容

我有一个NSString这样的:

http://www.

但我想将其转换为:

http%3A%2F%2Fwww.

我怎样才能做到这一点?


问题答案:

逃避想要的角色还需要做更多的工作。

范例程式码

iOS7及以上:

NSString *unescaped = @"http://www";
NSString *escapedString = [unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSLog(@"escapedString: %@", escapedString);

NSLog输出:

escapedString:http%3A%2F%2Fwww

以下是有用的URL编码字符集:

URLFragmentAllowedCharacterSet  "#%<>[\]^`{|}
URLHostAllowedCharacterSet      "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet  "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet      "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet     "#%<>[\]^`{|}
URLUserAllowedCharacterSet      "#%/:<>?@[\]^`

创建一个结合以上所有内容的角色集:

NSCharacterSet *URLCombinedCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@" \"#%/:<>?@[\\]^`{|}"] invertedSet];

创建一个Base64

对于Base64字符集:

NSCharacterSet *URLBase64CharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"/+=\n"] invertedSet];

对于Swift 3.0:

var escapedString = originalString.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)

对于Swift 2.x:

var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet())

注意:stringByAddingPercentEncodingWithAllowedCharacters还将对需要编码的UTF-8字符进行编码。

iOS7之前的版本
将Core Foundation与ARC一起使用Core Foundation:

NSString *escapedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
    NULL,
   (__bridge CFStringRef) unescaped,
    NULL,
    CFSTR("!*'();:@&=+$,/?%#[]\" "),
    kCFStringEncodingUTF8));

在不使用ARC的情况下使用Core Foundation:

NSString *escapedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
    NULL,
   (CFStringRef)unescaped,
    NULL,
    CFSTR("!*'();:@&=+$,/?%#[]\" "),
    kCFStringEncodingUTF8);

注意:-stringByAddingPercentEscapesUsingEncoding将不会产生正确的编码,在这种情况下,它将不会对返回相同字符串的任何内容进行编码。

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding 编码14个字符:

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

testString:

" `~!@#$%^&*()_+-={}[]|\\:;\"'<,>.?/AZaz"

encodeString:

"%20%60~!@%23$%25%5E&*()_+-=%7B%7D%5B%5D%7C%5C:;%22'%3C,%3E.?/AZaz"

注意:请考虑这组字符是否满足您的需求,如果没有根据需要进行更改。

需要编码的RFC 3986字符(已添加%,因为它是编码前缀字符):

“!#$&’()* +,/:; =?@ []%”

一些“未保留的字符”还被编码:

“ \ n \ r \”%-。<> \ ^ _`{|}〜“



 类似资料:
  • 本文向大家介绍Swift和Objective-C 混编注意事项,包括了Swift和Objective-C 混编注意事项的使用技巧和注意事项,需要的朋友参考一下 Swift和Objective-C 混编注意事项整理: 前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛。当然这对新入行的童鞋没来讲,的确算是福音,但对于整个iO

  • 本文向大家介绍在Swift中使用Objective-C编写类、继承Objective-C类,包括了在Swift中使用Objective-C编写类、继承Objective-C类的使用技巧和注意事项,需要的朋友参考一下 互用性(互操作性)使开发者可以定义融合了 Objective-C 语言特性的Swift类。编写 Swift 类时,不仅可以继承 Objective-C 语言编写的父类,采用 Objec

  • 主要内容:1. Objective-C特征,2. Objective-C类定义,3. 分配和初始化Objective-C对象,4. 访问数据成员,5. 属性Objective-C编程语言的主要目的是为C编程语言添加面向对象,类是Objective-C的核心特性,支持面向对象编程,通常称为用户定义类型。 类用于指定对象的形式,它将数据表示和方法组合在一起,以便将数据操作到一个整齐的包中。 类中的数据和方法称为类的成员。 1. Objective-C特征 类定义在两个不同的部分,即和。 几乎所有东西

  • 成员变量应该是 @private 小技巧 成员变量应该声明为 @private @interface MyClass : NSObject { @private id myInstanceVariable_; } // public accessors, setter takes ownership - (id)myInstanceVariable; - (void)setMyInstanc

  • Objective-C,通常写作 ObjC 和较少用的 Objective C 或 Obj-C,是扩充 C 的面向对象编程语言。它主要使用于 Mac OS X 和 GNUstep 这两个使用 OpenStep 标准的系统,而在 NeXTSTEP 和 OpenStep 中它更是基本语言。Objective-C 可以在 gcc 运作的系统写和编译,因为 gcc 含 Objective-C 的编译器。

  • 问题内容: 我想尝试一下Objective-C进行游戏编程。问题是我需要一些工具和库。 首先需要想到的是GUI和图形库。 我有什么选择? 问题答案: OpenStep / Cocoa类型的Objective C平台有四种非Mac实现: OpenStep / NextStep:仅Openstep / NeXT支持机器-停产。 p …可以记住名字或在网上找到它-它在某个地方!-Linux Cocotr