猿问

在 Go 中解析 csv 文件,第一行第一列中的额外字节

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


测试.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”从何而来?


慕斯709654
浏览 224回答 1
1回答

江户川乱折腾

一位同事提到它可能是字节顺序标记(BOM)https://softwareengineering.stackexchange.com/questions/372692/should-utf-8-csv-files-contain-a-bom-byte-order-mark
随时随地看视频慕课网APP

相关分类

Go
我要回答