为啥 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就可以啊