使用方法
- 文本框里默认放着一张四行示例表:表头
name,note,qty,张三的备注含逗号,李四的备注有成对双引号,王五的备注里有真正的换行。按 Ctrl+Enter(Mac 用 Cmd+Enter)或点「格式化 CSV」触发。 - 「分隔符方言」默认逗号。德语区与法语区 Excel 的默认列表分隔符是分号,发出去前换成「分号 ;」,整行挤进一列的问题就消失;切制表符是 TSV,切竖线常见于日志管道。
- 「引号策略」默认 minimal,只有含界线字符的字段才加引号;选 all 后每个字段都加引号,老旧解析器读得更稳,代价是文件变大。
- 「行尾」默认 CRLF,即 RFC 4180 写明的那一对字符;换成 LF 更接近 Linux 脚本与 Git 仓库的习惯,复制与导出都按此落地。
- 「对齐预览」默认关闭。开启后按每列最宽值补齐空格,空格加在引号外面,并强制每个字段加引号——否则空白会被解析回数据表里。
- 「参与处理的行数上限」默认 50 行,允许 1 到 200,超出的行会被截掉并在蓝框说明。
- 输入为空、双引号没闭合、引号出现在字段中间、各行列数不一致、行数上限填成 0 或 300,都会给出针对该条的提示。
- 结果区下面是四张卡片:行数、每行列数、需加引号的字段数、二次解析是否还原;再下面是转义判定表,把二十个典型取值按当前方言逐条判一遍。
这个 CSV 格式化工具能解决什么
第一类是「备注字段里的逗号」。张三,"含逗号, 的备注",3 按逗号朴素切开会得到四段,备注里的逗号被当成列界线。RFC 4180 的做法是给整个字段包一层双引号:引号状态内逗号只是普通字符,只有引号外的逗号才算界线。
第二类是「字段里本来就有双引号」。写法是把一个引号写成两个:李四,"他说 ""你好"", 然后离开",1。只写一个会让解析器认为字段在此闭合,后面紧跟的逗号升格为界线,一个字段被劈成两列。CSV 的转义是引号翻倍,不是像 JSON 那样加反斜杠。
第三类是「一个字段跨了两行」。收货地址、客户备注里常有换行,只要被双引号包住,换行就属于字段内容而不是记录边界。示例第四行解析完仍是 4 条记录。
第四类是「双方软件认的分隔符不一样」。德语区与法语区 Excel 把分号当列表分隔符、把逗号当小数点,逗号分隔的文件发过去会整行挤成一列;换到分号方言后 张三;含逗号, 的备注;3 里的逗号不再是界线,连引号都省了。
还有一层保险:结果会被重新喂回同一个解析器逐字段比对,完全一致才算通过。这能挡住「看着排整齐了、数据其实已被改掉」,比如把补齐的空格塞进引号内部。
解析原理与字符规则
RFC 4180 只规定三件事:字段含逗号、双引号或 CR/LF 时才必须用双引号包围;字段内部的双引号写成连续两个;记录之间用 CRLF 分隔。它没有字符集规定,也没有类型推断——2026/01/01、007、1e5 在这里都只是字符串。
本页的解析器是逐字符状态机,而不是「先换行切断、再按分隔符切列」。它只有两个状态:引号内与引号外。引号外的分隔符结束当前字段、CR 或 LF 结束当前记录;引号内的字符一律照抄,连续两个双引号折叠成一个。
为什么不能用切分与替换来写。跨行字段按行切断会被劈成两行,第二行凭空多出半个引号;只有状态机能保持引号内的换行为普通字符。同理,先把 "" 全局替换成 " 再切分,会把藏在引号里的界线字符放出来。
换方言为什么能少加引号。引号的作用只有一个:保护字段里的界线字符。切到分号后逗号失去界线含义,含逗号, 的备注 退化成普通文本;反过来含分号的字段就要被加引号。所以换方言后,哪些字段需要引号是会挪位置的。
对齐预览为什么必须配引号。把 ab 补齐到宽度 4,空格写在引号内得到 "ab ",解析回来是 ab ,数据被改;写在引号外得到 "ab",解析回来仍是 ab。本页开启对齐时强制加引号,正是为了把空白挡在引号外。
为什么需要二次解析。一次正确的往返应满足「再解析一次得到同一张表」。本页把结果重新喂给同一个状态机,逐一比较行列数与每个字段,完全一致才显示「OK 完全一致」。
再序列化只有三个变量:分隔符 d 决定哪个字符是界线,策略 qt 决定按需加还是全部加,行尾 eol 决定用 \r\n 还是 \n。三者都与数据内容无关,只改变这份数据的方言。
完整示例
默认示例 4 行 3 列,逐字段解析:第 1 行 name、note、qty;第 2 行 张三、含逗号, 的备注、3;第 3 行 李四、他说 "你好", 然后离开、1;第 4 行 王五、第一行\n第二行、2。四行都是 3 个字段。
用 minimal、逗号方言、CRLF 序列化:首行裸写成 name,note,qty;第二行备注因含逗号被加引号;第三行内部引号翻倍后写成 李四,"他说 ""你好"", 然后离开",1;第四行保留字段内部那个真正的换行,物理上占两行、逻辑上仍是一条记录。
切到 all 后,首行变成 "name","note","qty",第三行变成 "李四","他说 ""你好"", 然后离开","1"——内部引号翻倍这条规则在两种策略下完全一样。这段结果再解析一次,仍得到 4 行 3 列且每个字段一致。
切到分号方言后同一条记录变成 张三;含逗号, 的备注;3,一个引号都不需要;制表符得到 张三\t含逗号, 的备注\t3,竖线得到 张三|含逗号, 的备注|3,同理都不需要引号。
分隔符方言与引号对照表
同一条记录在四种方言下的输出,注意「是否还需要引号」这一列会随方言变化。
| 方言 | 界线字符 | 这一行的输出 | 是否还需要引号 | 典型场景 |
|---|---|---|---|---|
| 逗号方言 | , | 张三,"含逗号, 的备注",3 | 需要(字段含逗号) | 英语区 Excel |
| 分号方言 | ; | 张三;含逗号, 的备注;3 | 不需要 | 德语区、法语区 Excel |
| 制表符方言 | \t | 张三\t含逗号, 的备注\t3 | 不需要 | TSV、命令行管道 |
| 竖线方言 | | | 张三|含逗号, 的备注|3 | 不需要 | 日志、数据仓库 |
哪些字符会触发加引号,以及相关的保留策略。
| 字段情形 | 写法 | minimal 是否加引号 | 说明 |
|---|---|---|---|
| 含当前分隔符 | 含逗号, 的备注 | 加 | 不加会被当成多一列 |
| 含双引号 | 他说 ""你好"" | 加,且内部引号翻倍 | 翻倍只发生在字段内部这一个层级 |
| 含 LF 或 CR | 第一行\n第二行 | 加 | 换行属于字段内容,不结束记录 |
| 前后有空格 | " 张三 " | 按 RFC 不必加 | 要保留前后空格就手动加引号 |
| 纯文本或数字 | abc / 123 | 不加 | 类型由读取方推断,本页按字符串 |
| 空字段 | (空) | 不加 | 两个连续分隔符之间视为空字符串 |
对齐补齐位置的正误对比,这是最容易改坏数据的一处。
| 补齐位置 | 写法 | 再次解析得到 | 结论 |
|---|---|---|---|
| 引号内 | "ab " | ab | 多了两个空格,数据被改,错 |
| 引号外 | "ab" | ab | 还原成原值,对 |
结果边界与保留策略
- 输入为空或去掉空白后没有内容时,提示须粘贴至少一行文本,不会沿用上一次的输出结果。
- 某个字段以双引号开头却到记录结束都没闭合,会报出具体行号与列号,请检查是不是漏写一个引号。
- 双引号出现在字段内容中间(前面已有普通字符)时判定为非法,这是对
ab"cd这类残缺输入的具体拦截。 - 各行字段数不一致时给出第一处的行号与实际列数,多出的分隔符或未闭合的引号是常见原因。
- 行数上限允许 1 到 200 行,填 0、负数或超过 200 都会给出针对性提示,不做静默截断。
- 连续换行产生的空行按浏览器与 Excel 的惯例跳过,不计入行数,也不参与列数一致性判定。
- 前后空格、前导零、
1e5、=SUM(A1)一律原样保留,本页不做类型转换与数字格式推断。 - 导出与复制都按所选行尾落地;导出的 CSV 在文件头写入 UTF-8 BOM,Excel 直接双击就能正确识别中文。
常见问题
Excel 打开后中文全是乱码,是文件坏了吗?
多半是编码问题。本页导出的 CSV 已写入 UTF-8 BOM,直接双击打开应当正常;若在编辑器里另存时选了 ANSI 或系统本地编码,才会出现乱码。
为什么备注里的换行不会被当成新记录?
因为它被包在双引号里。RFC 4180 规定只有处在引号之外的 CR/LF 才结束一条记录,引号内部的换行属于字段内容。示例第四行因此是 1 条记录,不是 2 条。
该用 CRLF 还是 LF?
RFC 4180 规定用 CRLF,Windows 上的 Excel 也更习惯它;LF 更接近 Linux 脚本与 Git 仓库里样例文件的做法。文件要在 Windows 与 macOS 之间来回传,保留默认 CRLF 更省事。
对方打开我的文件只有一列,怎么回事?
对方软件认的分隔符与你导出的不一致。德语区、法语区 Excel 的默认列表分隔符是分号,于是整行被识别成一个字段;把方言切成「分号 ;」重新导出即可。
前导零编号 007 会被吃掉吗?
本页不会。所有字段按字符串处理,不做数字推断,007 保持原样。吃掉前导零的是下游软件的类型推断,想保住它需要在读取方把该列设为文本。
开启对齐预览后为什么每个字段都加上了引号?
因为补齐空格写在引号内会被解析回数据表里把内容改掉。本页开启对齐时强制给每个字段加引号,再把空白补在引号外面,保证再解析一次仍得到原值。
这个工具免费吗?
免费,无需注册即可使用。
输入的数据安全吗?
安全。解析与重新序列化都在当前浏览器本地完成,表格内容不会上传到服务器。
相关工具
- CSV 转 JSON 转换器:把表头投产成接口数据的下一步。
- JSON 转 CSV 转换器:把对象数组摊平成表格落地。
- TSV 转 CSV 转换器:制表符方言与逗号方言互转。
- CSV 转 Markdown 表格:把同一张表排成文档表格。
- JSON 格式化工具:JSON 的缩进、排序与转义还原。