为什么CFStringEncodings在Swift中没有UTF8?

我想在Swift中创build百分比编码的string,所以我可以安全地发送文本作为GET请求。 我发现了一些Objective C代码,我试图将其转换为Swift。 我写了下面的Swift代码:

 CFURLCreateStringByAddingPercentEscapes(nil, CFStringRef(encodedString), nil, CFStringRef("/%&=?$#+-~@<>|\\*,.()[]{}^!"), kCFStringEncodingUTF8) 

在Swift中没有kCFStringEncodingUTF8 …如果你右键点击CFStringEncodings源,你会发现里面有一百万个东西,但是没有UTF8。 我不明白。 如何在这种情况下使用UTF8string编码?

编辑:我发现了一种方法来编码一个string,但我仍然不明白发生了什么事kCFStringEncodingUTF8

UTF-8string编码定义为

 enum CFStringBuiltInEncodings : CFStringEncoding { // ... case UTF8 /* kTextEncodingUnicodeDefault + kUnicodeUTF8Format */ // ... } 

并可以作为

 let orig = "a/b(c)" let escaped = CFURLCreateStringByAddingPercentEscapes(nil, orig, nil, "/%&=?$#+-~@<>|\\*,.()[]{}^!", CFStringBuiltInEncodings.UTF8.rawValue) println(escaped) // a%2Fb%28c%29 

正如@Zaph在评论中提到的, stringByAddingPercentEncodingWithAllowedCharacters可能更易于使用:

 let charset = NSCharacterSet(charactersInString: "/%&=?$#+-~@<>|\\*,.()[]{}^!").invertedSet let escaped = orig.stringByAddingPercentEncodingWithAllowedCharacters(charset) 

或者使用为URL编码创build字符集的预定义字符集之一。

kCFStringEncodingUTF8已经在Swift中用UTF8代替了。

在iOS7中添加了一个新的NSString方法,它需要一个字符集和一些专门的字符集,当然你可以创build专门的字符集。 几乎没有理由再使用CFURLCreateStringByAddingPercentEscapes 。 看到这个:所以答案