将String / NSString编码为Code Page 850格式

时间:2017-05-30 18:05:01

标签: ios swift3 character-encoding

我需要将常规字符串(String或NSString)编码为Code Page 850 format

有一个支持这种格式的外部String enconding(它在CFStringEncoding枚举中称为dosLatin1)。我不知道它是否可以真正完成工作,但它是我在整个iOS文档中找到的唯一参考Code Page 850。

如何使用CFStringEnconding将“常规”字符串转换为CP850格式的字符串?这是最好的方式吗?

1 个答案:

答案 0 :(得分:1)

如果你可以使用CP 1252这是850的“现代”替代品,那么你可以使用Swift String的内置转换。否则,您可以尝试使用Core Foundation的转换方法。

let swiftString = "This is a string"

// Easy way -- use Swift String plus "modern" CP 1252 eoncding to get a block of data. Note: does not include BOM
if let data = swiftString.data(using: .windowsCP1252, allowLossyConversion: true) {
    print(data) // Do something with the resulting data
}

// The more thorough way to use CP 850 (enum value = 1040) -- use Core Foundation. This will produce a BOM if necessary.
let coreFoundationString = swiftString as CFString
let count = CFStringGetLength(coreFoundationString) * 2
var buffer = [UInt8](repeating: 0, count: count)
let resultCount = CFStringGetBytes(coreFoundationString as CFString, CFRangeMake(0, CFStringGetLength(coreFoundationString)), 1040, 0x41, true, &buffer, count, nil)
print(buffer)