英文:
gocsv UnmarshalBytes fail
问题
当我调用以下函数时,我得到错误信息parse error on line 2, column 25: bare "" in non-quoted-field
。你能告诉我为什么会出现这个错误吗?我该如何修复它?
func ParseFromCSV(data []byte, obj interface{}) error {
encode := GetEncode(data)
if encode == GBK {
var err error
data, err = ConvertGBK2UTF8(data)
if err != nil {
return err
}
}
bom := []byte{0xEF, 0xBB, 0xBF}
if len(data) > len(bom) && data[0] == bom[0] && data[1] == bom[1] && data[2] == bom[2] {
data = data[3:]
}
if err := gocsv.UnmarshalBytes(data, obj); err != nil { // Load clie
fmt.Println(err) // nts from file
return err
}
return nil
}
当你调用这个函数时,出现错误的原因是在第2行第25列有一个裸露的引号(bare "" in non-quoted-field)。你可以通过检查代码中的引号使用情况来修复这个错误。确保所有的引号都被正确地引用或转义。
英文:
When I call the following function, I get err parse error on line 2, column 25: bare " in non-quoted-field
Can you tell me why this is happening? How do I fix it?
func ParseFromCSV(data []byte, obj interface{}) error {
encode := GetEncode(data)
if encode == GBK {
var err error
data, err = ConvertGBK2UTF8(data)
if err != nil {
return err
}
}
bom := []byte{0xEF, 0xBB, 0xBF}
if len(data) > len(bom) && data[0] == bom[0] && data[1] == bom[1] && data[2] == bom[2] {
data = data[3:]
}
if err := gocsv.UnmarshalBytes(data, obj); err != nil { // Load clie
fmt.Println(err) // nts from file
return err
}
return nil
}
答案1
得分: 1
在gocsv的GitHub上有一个未解决的问题。用户报告了完全相同的问题,可能是由于UTF-8 BOM编码引起的。
将以下代码片段替换为应该可以解决问题:
if err := gocsv.UnmarshalBytes(data, obj); err != nil { // 从文件加载数据
fmt.Println(err)
return err
}
替换为:
in := csv.NewReader(transform.NewReader(bytes.NewReader(data), unicode.UTF8BOM.NewDecoder()))
if err := gocsv.UnmarshalCSV(in, obj); err != nil { // 从文件加载数据
fmt.Println(err)
return err
}
更多详情请参考这里。
英文:
There is an solved issue on the gocsv github. The user reports the exact same issue, likely due to UTF-8 BOM encoding.
Replacing
if err := gocsv.UnmarshalBytes(data, obj); err != nil { // Load clie
fmt.Println(err) // nts from file
return err
}
with
in := csv.NewReader(transform.NewReader(bytes.NewReader(data), unicode.UTF8BOM.NewDecoder()))
if err := gocsv.UnmarshalCSV(in, obj); err != nil { // Load clie
fmt.Println(err) // nts from file
return err
}
should fix it.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论