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

String 解析Go中的csv文件,第一行第一列中的额外字节,string,csv,go,String,Csv,Go,我是新手,我正试图通过解析csv文件的第一行来获取列名。当我将字符串的值与期望的字符串值进行比较时,比较结果表明它们不相等,我无法找出原因。当我打印字节值时,我注意到在解析字符串的开头有3个额外的字节。这似乎只发生在第一列的第一行,它告诉我这与文件格式有关?我不确定,我在CSV go参考中没有看到任何东西。如果这是一个“愚蠢”的问题,我提前道歉 test.csv: 姓名,邮政编码,foo 约翰,91201,诸如此类 玛丽,98108,meh 鲍勃,12345,嘘 package main im

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

test.csv:

姓名,邮政编码,foo

约翰,91201,诸如此类

玛丽,98108,meh 鲍勃,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”来自哪里?

一位同事提到它可能是一个字节顺序标记(BOM)


一位同事提到它可能是一个字节顺序标记(BOM)


我在这里发布了源代码:我在这里发布了源代码:它是。将BOM表放在UTF-8文件上是绝对不正确的行为,但某些软件仍然会这样做。没有BOM表,UTF-8 csv在Excel中看起来像垃圾。它是。将BOM表放在UTF-8文件上是绝对不正确的行为,但有些软件还是会这样做。没有BOM表,UTF-8 csv在Excel中看起来就像垃圾。
ef bb bf 6e 61 6d 65  
6e 61 6d 65 
Did not match name