【问题标题】:Can you encode CR/LF in into CSV files?您可以将 CR/LF 编码为 CSV 文件吗?
【发布时间】:2010-10-08 15:21:13
【问题描述】:

以某种方式将 CR/LF 字符编码到 CSV 文件中是否可能/合法?

(作为 CSV 标准的一部分?)

如果是这样,我应该如何编码 CR/LF?

【问题讨论】:

    标签: csv


    【解决方案1】:

    是的,你需要用引号括起来:

    "some value
    over two lines",some other value
    

    来自this document,这是公认的 CSV 标准:

    包含换行符 (CRLF)、双引号和逗号的字段应该用双引号括起来

    【讨论】:

    • 不是普遍接受的格式 RFC 4180 吗? en.wikipedia.org/wiki/Comma-separated_values
    • 维基百科文章还说“......(但是,许多 CSV 实现不支持嵌入式换行符)。”
    • @HaveAGuess RFC 4180 在这里说了同样的话。第 2 页,第 6 项。
    • @jpmc26 实际上,我只是想鼓励 OP 将访问者发送到官方 RFC,而不是声称这个其他网站是“普遍接受的 CSV 标准”
    • 即使添加了双引号,数据也会被插入到新的单元格中。
    【解决方案2】:

    这里提到了 CSV 的标准。我有兴趣了解更多相关信息 - 我知道的唯一标准是

    【讨论】:

    • 是的,您链接到的 RFC 是最终标准。它提到将 CRLF 放在双引号内以逃避它。不幸的是,您关于 excel 接受的任何内容的观点都是有效的……又一个 MS 试图颠覆标准的案例。
    • RFC 是在 2005 年创建的! Excel 支持 CSV 的时间要长得多...
    • ShuggyCoUk 这是最后一次更新,它是在很久以前创建的:en.wikipedia.org/wiki/Comma-separated_values
    【解决方案3】:

    最常见的 csv 变体是与 excel 兼容的变体,只要字段用双引号括起来,就允许嵌入换行符。

    foo,bar,"blah blah
    more blah blah",baz
    

    foo,bar,"blah blah
    more blah blah"
    

    "blah blah
    more blah blah",baz
    

    都是有效的。这种机制还允许嵌入逗号。

    在没有嵌入新行(或逗号)的文本字段周围使用引号也可以。例如,如果文本本身包含双引号,则转义它的机制是将两个放在一起。

    foo,bar,"this person said ""blah blah 
    more blah blah""",baz
    

    编写正确处理此问题的 csv 阅读器可能会很棘手(尤其是在您依赖正则表达式的情况下)。

    【讨论】:

    • 如果我想嵌入报价怎么办?
    • 无法确认。在 Office 365 ProPlus Excel v1808 中,在引用字段中导入带有任何换行符的数据会将其余单元格分成一个新的电子表格行。使用 Windows-1250 编码。
    【解决方案4】:

    我认为它不是标准的一部分(如果有的话),但您可以使用标准的 C 样式转义,即编码 \r\n。

    但是请记住,如果您这样做,您还应该对转义字符进行编码 - 即解码后 \ 产生 \。

    【讨论】:

    • csv 不使用 C 风格的转义
    • 一些 csv 应用程序支持这种形式。令人遗憾的是,csv 是一个定义不明确的标准。 Talking Excel csv(实际上)是最好的,虽然这不是
    猜你喜欢
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2010-12-04
    • 1970-01-01
    相关资源
    最近更新 更多