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

楔子

根據(jù)需求做一個(gè)csv報(bào)表數(shù)據(jù)導(dǎo)入入庫(kù)功能,運(yùn)行多天突然運(yùn)維告知導(dǎo)入數(shù)據(jù)有問(wèn)題,有問(wèn)題那就排查唄。。。

題外話:這個(gè)問(wèn)題足足浪費(fèi)了我2天時(shí)間,為此記錄在這,希望不要在采坑了?。?!

正文

說(shuō)在前面,這個(gè)csv表格數(shù)據(jù)是有中文的,ok繼續(xù)

通過(guò)日志打點(diǎn)發(fā)現(xiàn)了以下錯(cuò)誤

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

找了一圈,著實(shí)頭痛,我也知道中文需要做處理轉(zhuǎn)化這個(gè)我已經(jīng)做了,并且已經(jīng)明確是utf-8了通過(guò)標(biāo)準(zhǔn)庫(kù)方法進(jìn)行判斷的還是報(bào)錯(cuò)。著實(shí)讓我摸不著頭腦。另判斷utf-8方法如下

import????(

????"unicode/utf8"

)

if utf8.Valid(readData){

????fmt.Println("is utf-8")

}

ok,最后借助了百度,google找了一大圈功夫不負(fù)有心人,最后發(fā)現(xiàn)utf-8還有utf-8 bom這種編碼格式,我想罵娘。。。至于編碼規(guī)則啥的就不詳細(xì)說(shuō)了,有興趣自行搜索吧。

解決方案如下:

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

// 方式二 (此方法會(huì)把utf-8中的bom前綴去除掉,即使文件內(nèi)容是utf-8編碼不帶bom也不會(huì)報(bào)錯(cuò),也是可以的)
read := csv.NewReader(transform.NewReader(bytes.NewReader(raw), unicode.UTF8BOM.NewDecoder()))
// todo some thing

至于其他編碼方式以及轉(zhuǎn)換可以查看golang官方擴(kuò)展庫(kù) golang.org/x/text/encoding 庫(kù)中的源碼。

參考

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/

一個(gè)用golang的牛馬

完~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容