为啥 CFStringEncodings 在 Swift 中没有 UTF8?

Posted

技术标签:

【中文标题】为啥 CFStringEncodings 在 Swift 中没有 UTF8?【英文标题】:Why doesn't CFStringEncodings have UTF8 in Swift?为什么 CFStringEncodings 在 Swift 中没有 UTF8? 【发布时间】:2014-09-11 11:26:24 【问题描述】:

我正在尝试在 Swift 中创建一个百分比编码的字符串,这样我就可以安全地以 GET 请求的形式发送文本。我发现了一些我正在尝试转换为 Swift 的 Objective C 代码。我编写了以下 Swift 代码:

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

在 Swift 中没有 kCFStringEncodingUTF8 ...如果您右键单击 CFStringEncodings 源,您会看到那里有一百万个东西,但没有 UTF8。我不明白。在这种情况下如何使用 UTF8 字符串编码?

编辑:我找到了一种编码字符串的方法,但我仍然不明白 kCFStringEncodingUTF8 发生了什么事情

【问题讨论】:

【参考方案1】:

UTF-8 字符串编码定义为

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)

或使用预定义的字符集之一 Creating a Character Set for URL Encoding.

【讨论】:

我们现在必须使用:CFStringBuiltInEncodings.UTF8.rawValue,而不是使用 toRaw()【参考方案2】:

kCFStringEncodingUTF8 在 Swift 中已被替换为:UTF8

ios7 中添加了一个新的NSString 方法,它接受一个字符集,并添加了许多专门的字符集,当然您可以创建专门的字符集。几乎没有理由再使用CFURLCreateStringByAddingPercentEscapes。看到这个:SO Answer

【讨论】:

以上是关于为啥 CFStringEncodings 在 Swift 中没有 UTF8?的主要内容,如果未能解决你的问题,请参考以下文章

求stm32高手,我想用pb3当普通io口,为啥不成功呢?,看资料上显示,开启sw,关闭jtag就可以啊

为啥 Windows LookAndFeel 使字体太小?

C#为啥一个方法的运行时间不一样?

为啥 Chrome 的 PushManager 会返回旧版 API?

为啥要进行平面点云数据的拟合

Swift 4 相机视图,为啥这会在 iPad 而不是 iPhone 上崩溃?