TSV转CSV转换器_制表符表格转逗号分隔带转义处理

把用制表符(Tab)分隔的 TSV 文本,转换成用逗号分隔的 CSV。遇到含逗号、双引号或换行的单元格,会自动加引号并把内部的双引号双写,保证 Excel 能正确还原。转换完全在本地浏览器里完成,你的文本不会上传。

输入框支持 Ctrl / Cmd + Enter 转换,也可以一边输入一边看结果;下方「转义场景对照表」共 14 行,默认显示 12 行,点「加载更多」看余下 2 行;「复制对照表」复制制表符分隔文本,「导出 CSV」保存为带字节序标记的文件。

使用方法

  1. 打开页面就有一组完整结果:输入框已经填入一份三行三列的示例 TSV,结果区已经给出对应的 CSV(含逗号与引号的单元格已被正确转义),不需要先填任何东西。
  2. 想转换自己的数据,就把输入框里的示例整段替换成你的 TSV;列与列之间必须是真正的制表符(Tab),而不是多个空格。
  3. 输入框按 Ctrl 或 Cmd 加回车会立即转换;也可以每敲一个字就实时看到结果。结果区第一行是转换后的 CSV 文本,可直接复制粘贴进表格软件。
  4. 如果需要在 Excel 里直接双击打开,保持「包含 UTF-8 BOM」勾选,再点「导出 CSV」下载带标记的文件;只想复制文本就点「复制结果」。
  5. 结果区下面是「转义场景对照表」,列出 14 种典型单元格场景与其转换后的 CSV,方便你核对转义规则是否理解正确。
  6. 本页不联网、不写本地存储,刷新即回到默认示例;你输入的文本只在本机内存里算完即弃。

这个TSV转CSV转换器能解决什么

这个TSV转CSV转换器帮你把数据库导出、网页复制、日志抓取里常见的 Tab 分隔文本,变成几乎所有软件都能吃的逗号分隔 CSV。它最实用的地方是「正确转义」:当某个单元格里本身就有逗号或双引号时,如果直接拿逗号去拼,下游软件会把一格拆成两格,或者把引号当成字段边界,数据就乱了。

第二类场景是跨工具搬运表格。很多系统导出的中间格式是 TSV,但人最习惯用 Excel 打开 CSV,二者只差一个分隔符和一套转义约定。本页把这套约定做对,省得你手动去找替换、还容易漏掉藏在数据里的特殊字符。

第三类场景是处理"脏数据"。真实数据里经常混着引号、逗号甚至换行,本页按 RFC 4180 的规则统一处理——含特殊字符的整格加引号、内部引号双写——让你不必为每种意外单独写清理脚本。

必须写清的边界:标准 TSV 本身不支持"单元格内换行",输入里出现的换行会被当作"换一行",而不是一个跨行的单元格;真正需要跨行单元格时,CSV 侧也要靠引号包住整格,本页对此只做尽力而为的拆分。

分隔符判定与转义的原理

转换分三步。第一步按换行把文本切成行(兼容 \r\n 与 \n);第二步每行再按制表符切成单元格;第三步把每个单元格判断是否需要加引号:只要单元格里出现逗号、双引号、换行或回车中任意一个,就整格用双引号包起来,并且把单元格内部的每个双引号写成两个双引号(双写)。

为什么引号要双写?因为 CSV 用双引号当字段边界,如果数据里本来就有引号,读取方无法区分"这是边界"还是"这是数据"。约定成"两个引号表示一个数据引号"后,解析方就能无歧义地还原。例如单元格内容是 "上海,浦东"(含引号与逗号),包起来并双写后变成 """上海,浦东""",读取时首尾各吃掉一个边界引号,内部的 "" 还原成一个数据引号。

关于 BOM:CSV 本质是文本,Excel 在中文 Windows 下常按本地编码打开,导致中文乱码。在文件最前面写入 UTF-8 字节序标记(EF BB BF),Excel 就能认出这是 UTF-8。本页的"导出 CSV"会在勾选时带上它,而页面上的结果文本与"复制结果"不带,以便你能看清纯内容。

变量含义取值影响
tsv原始 TSV 文本含 \t 与换行的纯文本转换的唯一输入
cell单个单元格被 \t 切出的片段决定是否加引号与双写
needQuote是否需引号含 , " \n \r 之一为真为真才整格加引号并双写
bomBOM 开关勾选 / 不勾选只影响导出文件,不影响页面文本

完整示例

默认示例的 TSV 共三行:第一行是表头 姓名、年龄、城市;第二行 张三、28、北京,全是普通字符,直接拼接成 张三,28,北京;第三行 李,四 含逗号、而 "上海,浦东" 这个单元格本身带着一对引号且含逗号,于是对整格加引号并双写内部引号,变成 """上海,浦东"""。结果区里那一整段就是:

姓名,年龄,城市
张三,28,北京
"李,四",32,"""上海,浦东"""

如果把输入换成只有一行的 李,四 32 "上海,浦东",输出就是 "李,四",32,"""上海,浦东""",和对照表里"逗号加引号"那一行一致。两个结果都是当场算出来的,不是写死的。

转义场景对照表

下表共 14 行:覆盖普通文本、含逗号、含引号、空字段、中文、英文、混合等典型场景。每行的 CSV 结果都由页面里的同一套转义函数现场算出,和你在上方输入框里得到的结果用的是同一套逻辑;默认显示 12 行,点「加载更多」看余下 2 行。

场景说明CSV 结果
普通文本不含逗号与引号,直接拼接姓名,年龄,城市
含逗号单元格出现英文逗号须加引号"李,四",32
含双引号内部引号须双写并整格加引号"""He said hi""",x
逗号加引号同时含逗号与引号"""上海,浦东""",ok
全数字纯数字按原样输出28,32,19
空单元格连续分隔符产生空字段a,,c
中文无特殊中文标点不触发转义张三,北京,28
单引号单引号不是 CSV 特殊字符a'b,c
分号分号也不触发转义a;b,c
前后空格字段内含空格保留但不加引号 x ,y
仅逗号英文英文单词含逗号"Hello,World",1
引号在开头引号位于单元格首位"""lead""",x
两列含逗号两个单元格都含逗号"a,b","c,d"
混合长字段含逗号引号与中文"""你好"",世界",x

横向读这张表能得出一条实用结论:判断要不要加引号,只看单元格里有没有 , " 换行 回车 这四类字符,和"是不是中文""有没有空格"都没关系——中文、空格、分号、单引号都不会触发转义。

结果边界与错误提示

常见问题

为什么我的逗号没有被正确分开?

多半是列之间用了空格而不是制表符。CSV 以逗号为分隔,但若源头 TSV 其实是用空格对齐的,本页会把整行当一个单元格,逗号也就不会被当成分隔。请确认你的文本是用真正的 Tab 分隔,必要时先在编辑器里显示不可见字符。

双写引号到底怎么读?

读取方遇到两个连续引号,会还原成一个数据引号;最外层的一对引号是字段边界。所以 """上海,浦东""" 拆开是:边界引号 + 数据内容 "上海,浦东"(其中内部引号已双写还原)+ 边界引号,最终得到带引号与逗号的一个完整单元格。

一定要勾 BOM 吗?

不一定。BOM 只是帮 Excel 识别 UTF-8,避免中文乱码;如果你把结果粘进已经用 UTF-8 打开的编辑器或程序,不带 BOM 更干净。页面文本与复制结果都不带 BOM,只有「导出 CSV」在勾选时带。

单元格里有换行怎么办?

标准 TSV 不定义单元格内换行,本页会把换行当作"下一行",而不是跨行单元格。若你确实要一个跨多行的单元格,应改用 CSV 源并用引号把整格包住,解析软件才会把它当作一格内的换行。

单引号和分号要转义吗?

不要。CSV 只对逗号、双引号、换行、回车敏感,单引号、分号、空格、中文都不触发转义,会原样保留。这也是对照表里"单引号""分号"两行没有额外引号的原因。

转换大文件会卡吗?

转换是纯字符串处理,在浏览器里同步完成。几千行通常瞬间结束;几十万行会占用较多内存与时间,建议分批处理,本页没有做分块流式转换。

我的文本会被上传吗?

不会。整个转换过程都跑在你的浏览器本地,文本只存在于本机内存,页面既不发请求也不写本地存储,刷新后输入框回到默认示例。

导出的对照表 CSV 带字节序标记吗?

带。对照表 CSV 导出时写入 UTF-8 字节序标记,Excel 双击不乱码;「复制对照表」是制表符分隔文本,粘进表格软件会自动分列,两者内容一致。

相关工具