代码之家  ›  专栏  ›  技术社区  ›  AVEbrahimi

将BOM写入Swift流

  •  0
  • AVEbrahimi  · 技术社区  · 6 年前

    如何将BOM写入swift流?我需要它将文件导出到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 回复  |  直到 6 年前
        1
  •  1
  •   OOPer    6 年前

    试试这样的。假设你想创建一个CSV文件 在UTF-8中

    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将生成字符串的临时UTF-8表示形式,因此如果您希望使用UTF-8创建文件,它可能会起作用。

    这段代码与日语本地化的msexcel配合得很好,但我不确定它是否适用于其他本地化。