V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
fatbear001
V2EX  ›  问与答

使用 Go 标准库"encoding/csv"读取 csv 文件,发现单元格内容带有双引号"时会读取失败。

  •  
  •   fatbear001 · Dec 2, 2019 · 3068 views
    This topic created in 2341 days ago, the information mentioned may be changed or developed.

    在 github 上搜索了相关问题,好像都没有解决方案,有没有大佬知道怎么解决?

    6 replies    2021-01-07 14:13:25 +08:00
    oott123
        1
    oott123  
       Dec 2, 2019
    至少把那行 csv 贴出来看看吧。
    fatbear001
        2
    fatbear001  
    OP
       Dec 2, 2019
    @oott123 数据:ALD4501PEL,ST,15+,20-DIP ( 0.300",7.62mm ),990,
    zhzy
        3
    zhzy  
       Dec 2, 2019 via iPhone
    双引号需要转义 根据 csv 标准双引号要用两个双引号来表示或者用斜杠转义 维基百科原文:Embedded double quote characters may then be represented by a pair of consecutive double quotes,[13] or by prefixing a double quote with an escape character such as a backslash (for example in Sybase Central).
    oott123
        4
    oott123  
       Dec 2, 2019
    感觉你这数据本身也不是很规整的 csv
    引号 " 替换成两个引号 "" 试试吧
    diib
        5
    diib  
       Dec 2, 2019
    源数据不规则的话,自己写 parser 吧。
    改源数据的方法也可以,但实际情况不一定允许。
    ca2oh4
        6
    ca2oh4  
       Jan 7, 2021
    推荐处理:
    //r := csv.NewReader(fs)
    decoder := mahonia.NewDecoder("gbk") // 把原来 ANSI 格式的文本文件里的字符,用 gbk 进行解码。
    r := csv.NewReader(decoder.NewReader(fs))

    ////当我们在 CSV 文件上具有 de "(双引号)值时,就会发生这种情况。
    ////为了避免此错误,我们应该使用 LazyQuotes Parameter 像这样:
    //r.Comma = ';'
    r.LazyQuotes = true
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2699 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 446ms · UTC 03:08 · PVG 11:08 · LAX 20:08 · JFK 23:08
    ♥ Do have faith in what you're doing.