【问题标题】:Parsing csv file in Go, extra bytes in first row first column在 Go 中解析 csv 文件,第一行第一列中的额外字节
【发布时间】:2020-07-14 22:51:40
【问题描述】:

我是 Go 新手,我正在尝试通过解析 csv 文件的第一行来获取列名。当我将字符串的值与预期的字符串值进行比较时,比较表明它们不相等,我不知道为什么。当我打印字节值时,我注意到解析字符串的开头有 3 个额外的字节。这似乎只发生在第一列的第一行,它告诉我它与文件格式有关?我不确定,我没有在 CSV go 参考中看到任何内容。如果这是一个“愚蠢”的问题,我提前道歉。

test.csv:

姓名、邮政编码、foo

约翰,91201,等等

玛丽,98108,嗯 鲍勃,12345,嘘

package main

import (
    "encoding/csv"
    "fmt"
    "os"
)

func main() {
    var file, err = os.Open("test.csv")
    if err != nil{
        fmt.Errorf("Error opening File")
    }
    reader := csv.NewReader(file)
    record, err := reader.Read()
    if err != nil{

    }
    val := record[0]

    for i := 0; i<len(val); i++{
        fmt.Printf("%x ", val[i])
    }
    name := "name"
    fmt.Println(" ")
    for i := 0; i<len(name); i++{
        fmt.Printf("%x ", name[i])
    }


    if val != "name"{
        fmt.Println("Did not match name")
    } else {
        fmt.Println("found it!")
    }

}

输出如下所示:

ef bb bf 6e 61 6d 65  
6e 61 6d 65 
Did not match name

“ef bb bf”从何而来?

【问题讨论】:

标签: string csv go


【解决方案1】:

【讨论】:

  • 是的。将 BOM 放在 UTF-8 文件上是绝对不正确的行为,但有些软件还是会这样做。
  • 没有 BOM 的 utf-8 csv 在 Excel 中看起来像垃圾。
猜你喜欢
  • 2013-12-10
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
相关资源
最近更新 更多