编写BOM以在Swift中进行流式处理

时间:2018-09-19 20:45:45

标签: swift csv swift4

如何将BOM表写入快速流?我需要它来将文件导出到excel。

我做了什么,但是没用(输出中写入的数据错误):

let BOM = "\u{FEFF}"
var path = docPath + "/list.csv"

let stream = OutputStream(toFileAtPath: path, append: false)

stream?.open()
var i1:UInt8=254
var i2:UInt8=255
stream?.write(&i1, maxLength: 1)
stream?.write(&i2, maxLength: 1)

1 个答案:

答案 0 :(得分:1)

尝试类似这样的方法。假设您要为MS-Excel在UTF-8中创建 CSV文件

var path = docPath + "/list.csv"

if let stream = OutputStream(toFileAtPath: path, append: false) {
    stream.open()
    let BOM = "\u{FEFF}"
    stream.write(BOM, maxLength: 3) //BOM in UTF-8 is made of 3 bytes.
    //...
} else {
    print("Failed to create OutputStream:", path)
}

通过将Swift字符串直接传递到write(_:maxLength:)(第一个参数的类型为UnsafePointer<UInt8>),Swift会生成String的临时UTF-8表示形式,因此如果您想在UTF-8中创建一个文件。

使用此代码时,需要以UTF-8输出所有项目,并且某些项目需要转义。希望您对这些事情都了解。

此代码可与日语本地化的MS-Excel一起使用,但是我不确定它是否可以在其他本地化版本中使用。