import Foundation
extension String {
init?(gbkData: Data) {
//获取GBK编码, 使用GB18030是因为它向下兼容GBK
let cfEncoding = CFStringEncodings.GB_18030_2000
let encoding = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(cfEncoding.rawValue))
//从GBK编码的Data里初始化NSString, 返回的NSString是UTF-16编码
if let str = NSString(data: gbkData, encoding: encoding) {
self = str as String
} else {
return nil
}
}
var gbkData: Data {
let cfEncoding = CFStringEncodings.GB_18030_2000
let encoding = CFStringConvertEncodingToNSStringEncoding(CFStringEncoding(cfEncoding.rawValue))
let gbkData = (self as NSString).data(using: encoding)!
return gbkData
}
}
var str = “中国加油”
print(str.gbkData.count)
这段代码定义了一个String的扩展,实现了GBK数据到String的初始化以及String到GBK数据的转换。通过CFStringEncodings和CFStringConvertEncodingToNSStringEncoding进行编码转换,确保GBK数据能够正确地在不同编码环境中使用。
1909

被折叠的 条评论
为什么被折叠?



