V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fatbear001
V2EX  ›  问与答

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

  •  
  •   fatbear001 · 2019-12-02 16:03:27 +08:00 · 2318 次点击
    这是一个创建于 1847 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    6 条回复    2021-01-07 14:13:25 +08:00
    oott123
        1
    oott123  
       2019-12-02 16:07:29 +08:00
    至少把那行 csv 贴出来看看吧。
    fatbear001
        2
    fatbear001  
    OP
       2019-12-02 16:14:07 +08:00
    @oott123 数据:ALD4501PEL,ST,15+,20-DIP ( 0.300",7.62mm ),990,
    zhzy
        3
    zhzy  
       2019-12-02 16:15:10 +08:00 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  
       2019-12-02 16:15:42 +08:00
    感觉你这数据本身也不是很规整的 csv
    引号 " 替换成两个引号 "" 试试吧
    diib
        5
    diib  
       2019-12-02 16:25:20 +08:00
    源数据不规则的话,自己写 parser 吧。
    改源数据的方法也可以,但实际情况不一定允许。
    ca2oh4
        6
    ca2oh4  
       2021-01-07 14:13:25 +08:00
    推荐处理:
    //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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2799 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:46 · PVG 19:46 · LAX 03:46 · JFK 06:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.