golang csv parse error on line 1, column 1: bare " in non-quoted-field

chaunsin · · 3487 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

楔子

根据需求做一个csv报表数据导入入库功能,运行多天突然运维告知导入数据有问题,有问题那就排查呗。。。

题外话:这个问题足足浪费了我2天时间,期间还出了其他的一些问题着实让我抓狂,另外这篇文章希望能帮到你,不要在采坑了!!!

正文

说在前面,这个csv表格数据是有中文的。ok继续

通过日志打点发现了以下错误

parse error on line 1, column 1: bare " in non-quoted-field

找了一圈,着实头痛,我也知道中文需要做处理转化这个我已经做了,并且已经是明确是utf-8了通过标准库进行判断的还是报错。着实让我莫不知头脑。判断utf-8方法如下

import    (

    "unicode/utf8"

)

if utf8.Valid(readData){

    fmt.Println("is utf-8")

}

ok,最后借助了百度,google找了一大圈功夫不负有心人,最后发现utf-8还有 utf-8 bom 这种编码格式,我想骂娘。。。至于编码规则啥的就不详细说了,有兴趣自行百度吧。

解决方案如下:

import(

    "encoding/csv"


    "golang.org/x/text/encoding/simplifiedchinese"

    "golang.org/x/text/transform"

)

// 方式一

read := csv.NewReader(bytes.NewReader(raw))

read .LazyQuotes = true


// todo some thing

// 方式二 (此方法会把utf-8中的bom前缀去除掉,即使utf-8不带bom也不会报错,也是可以的)

read := csv.NewReader(transform.NewReader(bytes.NewReader(raw), unicode.UTF8BOM.NewDecoder()))

// todo some thing

至于其他编码方式以及转换可以查看golang官方扩展库 golang.org/x/text/encoding 库中的源码。

参考

https://stackoverflow.com/questions/31326659/golang-csv-error-bare-in-non-quoted-field

https://github.com/golang/go/issues/21672

https://zasy.github.io/2018/09/28/tx-06/

完~


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:chaunsin

查看原文:golang csv parse error on line 1, column 1: bare " in non-quoted-field

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3487 次点击  
加入收藏 微博
1 回复  |  直到 2021-12-08 22:26:58
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传