简体中文

数据和电子表格 · CSV 清理器

CSV 转义方言:双引号、反斜杠和数据库导出

· 背景

csv 解析 互操作性

双引号 CSV 路径成功,而反斜杠转义仍保留文字文本
原始 ToolAcre 矢量图

RFC 4180 表示双引号;一些数据库工具使用反斜杠导出。这篇文章解释了流行的转义约定、每个约定的来源,以及为什么在一种方言中有效的文件在另一种方言中会中断。

电子表格读取时带有杂散反斜杠的数据库导出 — 两个逃避的传统在一个文件中发生冲突

导出可以包含反斜杠后跟引号,因为它的生成器遵循编程语言样式约定,而面向电子表格的解析器需要双引号。将一种方言喂给另一种方言并不会产生中立的妥协。它更改引用状态打开和关闭的位置或在数据中留下转义字符。

ToolAcre 支持一个明确的规则:字段可以用双引号括起来,内部引号由两个引号表示。反斜杠没有转义作用。在装载之前识别合同比要求清洁工猜测生产商想要使用哪个标点符号更安全。

RFC 约定 — 用双引号括起来并将任何内部引号加倍,根本没有转义字符

对于诸如 `She said "hello", then left` 之类的值,RFC 样式 CSV 包围该字段并写入两次内部标记。分隔符保持在引号状态内,并且每个加倍的对返回一个文字引号。序列化反向应用相同的转换。

当字段包含当前分隔符、引号、LF、CR 或周围空格时,或者每当选择引用每个字段时,字段都会被引用。没有单独的转义字符。这个小语法针对分隔符、嵌入记录结尾和引号对进行了测试。

C 传统 — 从编程语言和一些数据库加载器继承的反斜杠转义引号、换行符和分隔符

某些源系统可以定义反斜杠约定,但 ToolAcre 没有针对它们的开关。像任何普通字符一样,反斜杠会附加到当前字段。然后根据解析器是否处于引用状态以及是否具有成对引用来解释后面的引用。

因此,在转换为双引号 CSV 之前,应使用为该方言配置的工具来解析反斜杠导出。搜索和替换是有风险的,因为文字反斜杠和转义序列可能看起来很相似。源语法必须决定哪些是语法。

反斜杠转义是一种不受支持的替代方言,不是 ToolAcre 可以读取的模式

该工作簿命名了数据库产品和数据框架库,但其默认值和可配置模式未记录在此存储库中。本文并未将方言归因于任何特定供应商。请查阅工作流程使用的确切导出器或加载器文档。

捕获生成文件的命令和选项。一个产品可能支持多种模式,因此它的名称本身并不是一种方言。可重复性来自配置以及包含分隔符、引号、换行符和反斜杠边缘情况的示例。

特定数据库和库默认值需要有自己的文档,此处未声明

在此解析器下,`"a \"quote\"",b` 并不意味着 C 风格读者可能期望的含义,因为斜杠保留在文本中,而引号控制 CSV 状态。相反,带引号的字段内的双对将变成一个引号而不是两个文字字符。

不匹配可能会触发移位列或未闭合引号警告,或者可能会解析为看起来错误的字符串而没有结构错误。预览代表性行并将它们与生产者进行比较。仅语法成功并不能证明转义语义匹配。

根据 ToolAcre 规则,反斜杠保持原义,双引号是唯一的引号转义

将包含逗号和引号的一个单元格写入 RFC CSV: `"She said ""hi"", then left"`。 ToolAcre 返回精确值 `She said "hi", then left`。用反斜杠代替内引号,并观察斜杠没有特殊保护。

比较演示了解析器规则,而不依赖于数据库品牌。正确解析后,下载会一致产生双引号。在不匹配的解析之后,导出只会标准化错误的单元格,因此在信任结果之前解析源方言。

这不包括什么 - 二进制导出、固定宽度文件和完全自定义转义字符

二进制导出、固定宽度记录和自定义转义字符位于路由之外。报告未关闭的报价并将剩余的输入用作一个字段;清洁器无法推断丢失的关闭属于哪里。这种歧义无法用一般方法来修复。

接口也不会自动转换反斜杠方言。使用显式命名转义字符的解析器,获取经过验证的字符串表,然后序列化为目标约定。每个语法应该在已知边界应用一次。

了解两端的方言 — ToolAcre CSV Cleaner 的引用修复如何标准化字段以实现标准解析器读取的一致引用

了解两个端点。当源遵循双引号 CSV 或当另一个解析器已经将不同的方言规范化为经过验证的单元格时,ToolAcre 是合适的。其输出提供一致的最小或全字段引用,并将每个嵌入的引用加倍。

不要将清理后的下载误认为是方言检测。自动检测器选择分隔符,而不是转义语法。可靠的传输将分隔符、引用规则、换行策略和编码一起记录,然后在生产数据移动之前测试对抗样本。