美文网首页
golang csv parse error on line 1

golang csv parse error on line 1

作者: chaunsin | 来源:发表于2020-12-28 20:59 被阅读0次

    楔子

    根据需求做一个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/

    一个用golang的无名小卒

    完~

    相关文章

      网友评论

          本文标题:golang csv parse error on line 1

          本文链接:https://www.haomeiwen.com/subject/idgtoktx.html