什么是 CSV
CSV(Comma-Separated Values,逗号分隔值)是用逗号(,)分隔字段的纯文本文件。电子表格和数据库中的行与列构成的二维表,用 CSV 可以以最简单的方式表示。
CSV 从 1970 年代起就被广泛使用,历史非常悠久,但并没有一个具有强制力的统一标准。IETF 的 RFC 4180 整理了一套被广泛采用的惯例,但它的定位是 Informational(信息参考),而非正式标准。尽管如此,Microsoft Excel、Google 表格、数据库导出/导入、跨系统数据对接等几乎所有实际场景都在使用它。
如果你想把 CSV 数据快速转成 JSON,可以直接把内容粘贴到 CSV to JSON 转换器,无需注册或上传文件,所有处理都在浏览器内完成。
CSV 的基本结构
行与列(记录与字段)
CSV 文件中,一个换行代表一条记录(行),逗号分隔的每个项是一个字段(列)。
张三,30,北京
李四,25,上海
王五,35,广州
表头行(列名)
文件的第一行通常用作列名(表头)。有了表头,每列数据的含义就清晰了。
name,age,city
张三,30,北京
李四,25,上海
王五,35,广州
表头行在规范上并非必须,但在实际数据交换中几乎总是包含。没有表头的话,第三列是居住城市还是出差地点,光看数据本身很难判断。
双引号与转义规则
当字段值中包含逗号或换行符时,需要用双引号(")将整个字段括起来。双引号内的逗号被视为数据本身,而非分隔符。
name,comment
张三,"爱好是读书、跑步"
李四,"北京市朝阳区
建国路 123 号"
当字段值中需要包含双引号本身时,用连续两个双引号("")转义。
title,note
产品A,"尺寸是""M""号"
解析后的结果是 尺寸是"M"号。不遵守这条规则生成的数据,会导致解析器错误识别列或报语法错误。
分隔符的类型与 TSV
虽然名字叫"逗号分隔值",但实际上用其他分隔符的文本文件也被泛称为 CSV。
| 格式 | 分隔符 | 主要使用场景 | 扩展名 |
|---|---|---|---|
| CSV | 逗号 , | 最通用。Excel、电子表格、通用系统的默认格式 | .csv |
| TSV | 制表符 \t | 数据分析、日志数据、部分数据库导出 | .tsv |
| 分号分隔 | 分号 ; | 小数点用逗号的地区(如德语版 Excel) | .csv |
| 管道符分隔 | 管道符 | | 遗留系统及特殊数据库转储 | .csv .txt |
大多数 CSV 解析器都支持指定分隔符。打开一个在欧洲地区生成的 CSV 文件时,如果所有内容挤在一列里,检查一下分隔符是否设成了分号。
CSV 与 Excel、电子表格的关系
在 Excel 中点击"另存为",文件类型选 CSV,就能生成 CSV 文件。反过来,双击一个 CSV 文件,Excel 会启动并以表格形式显示。
但使用 Excel 时有几点需要注意。Excel 打开 CSV 时会进行自动类型推断。例如,员工编号或邮政编码 007 前面的 0 会被去掉变成数字 7,1-2 这样的字符串可能被自动转成日期格式。
Google 表格中也可以通过"文件" > "下载" > "逗号分隔值(.csv)"菜单来导入和导出 CSV。
如果需要把 Excel 或 Google 表格中的数据直接以 Markdown 表格的形式贴进文档,参见 Excel 转 Markdown 表格。
编码与中文乱码(GB18030 / GBK / UTF-8 BOM)
打开 CSV 文件时如果文字变成乱码,绝大多数情况是编码问题。CSV 格式本身没有存储编码信息的标准头或元数据区域(RFC 4180 也没有规定编码),所以读取文件的程序需要猜测编码或由用户手动指定。
中文环境的 CSV 特别容易出现编码差异导致的问题。
- GB18030 / GBK / GB2312:中文 Windows 版 Excel 默认保存的 CSV 文件通常使用 GB18030(或其子集 GBK)编码。用期望 UTF-8 的 Web 应用或 Linux 服务器读取时,中文就会变成乱码。
- UTF-8(无 BOM):现代开发环境的默认编码。但旧版 Excel 或默认设置的 Windows 版 Excel 打开时,可能按 GBK(ANSI)错误解析,导致中文乱码。
- UTF-8 BOM(UTF-8-SIG):文件开头附带 3 字节 BOM(Byte Order Mark,
EF BB BF)的形式。Excel 检测到 BOM 后会识别为 UTF-8 文件并正确显示中文。但 Google 表格、Web API、部分 JSON 解析器会将 BOM 当作多余字符,导致第一列列名前出现不可见的特殊字符。
此外,还有一个中文环境特有的坑:全角逗号「,」与半角逗号「,」的混淆。在中文输入法下编辑 CSV 时,如果不小心输入了全角逗号,解析器无法将其识别为分隔符,整行数据会被当作一个字段,导致列数错乱。在 Excel 中查看时,所有数据会挤在同一个单元格里。
Python 的 pandas 读取带 BOM 的 CSV 文件时,指定 encoding="utf-8-sig" 即可自动去除 BOM 并正常读取。
import pandas as pd
# 读取 UTF-8 BOM 文件
df = pd.read_csv("data.csv", encoding="utf-8-sig")
# 读取 GB18030(Windows Excel 默认)文件
# df = pd.read_csv("data_excel.csv", encoding="gb18030")
为避免编码问题,团队内最好统一使用 UTF-8(并明确是否带 BOM),或在处理文件前显式转换编码。
CSV 的局限
CSV 上手简单、体积轻量,但结构性局限很明显。
无法表达层级结构(嵌套)
CSV 只能表示扁平的二维表。数据具有嵌套对象或数组等层级结构时,CSV 并不适合。
例如"一个用户有多条订单和一个收货地址"这样的结构,用 CSV 表达要么重复行、要么用自定义分隔符硬塞进单元格,管理起来很麻烦。
如果这类数据先转成 JSON,需要以 Markdown 表格展示时,可以参考 JSON 转 Markdown 表格。
没有数据类型
CSV 文件中所有数据都是字符串(文本)。30 是数字还是文本、true 是布尔值还是字符串,CSV 本身无法判断,需要读取数据的应用自行推断。相比之下,JSON 本身就有数据类型,语法和数据类型详见 JSON 是什么?。
无法嵌入元数据
CSV 没有记录编码信息或 schema 定义的方法。打开文件前无法通过标准手段得知编码是 UTF-8 还是 GB18030,只能由读取方猜测或外部指定(参见上文"编码与中文乱码"一节)。
不同工具的输出略有差异
CSV 没有唯一的强制标准规范(如前所述,RFC 4180 的定位是 Informational)。因此换行符、引号处理方式在不同工具间可能略有不同,解析器侧需要兼容这些差异。
为什么要把 CSV 转成 JSON
为了克服 CSV 的扁平局限、与现代 Web 系统顺畅对接,很多场景需要转成 JSON。
转为结构化数据
把 CSV 每行转为 JSON 对象后,表头名成为键(Key),每个字段的含义就清晰了。
[
{
"name": "张三",
"age": "30",
"city": "北京"
},
{
"name": "李四",
"age": "25",
"city": "上海"
}
]
REST API 对接
现代 Web 应用和 REST API 的请求体大多要求 JSON 格式。把 Excel 或数据库中导出的 CSV 数据转成 JSON 后,就可以直接用作 API 调用请求体。
程序处理更方便
JavaScript 等大多数编程语言中,JSON 可以用内置函数直接处理。用 Array.map() 或 Array.filter() 等高阶函数操作数据更加便捷。Python、Node.js、Go 等语言的具体转换方法,参见 CSV 转 JSON 指南。
处理 CSV 时的注意事项
不要用 split(',') 自行解析
在代码中用 line.split(",") 写个简易解析器很常见,但非常危险。字段值中包含逗号、双引号转义("")、多行文本时,解析会立刻出错。
务必使用经过验证的标准库或专用解析器。
- Python:标准库
csv模块或pandas - JavaScript / Node.js:
PapaParse或csv-parse - Java:
Apache Commons CSV或OpenCSV
处理前先验证数据
从外部收到的 CSV 文件,应先验证所有行列数是否一致、必需的表头是否齐全、是否存在空单元格或意外的分隔符,再进入后续处理流程。这样可以减少下游管道中的错误。
用 FormatArc 把 CSV 转成 JSON
处理大体积 CSV 文件或重要业务数据时,可以用 CSV to JSON 转换器 安全地转换。


- 打开 CSV to JSON 转换器。
- 在左侧输入框粘贴 CSV 文本。
- 右侧窗口实时生成格式化后的 JSON 结果。
所有运算通过浏览器的 WebAssembly 和 JavaScript 引擎在本地运行,客户信息或敏感业务数据不会发送到外部服务器。
如果希望把 CSV 数据以 Markdown 表格的形式贴到 README 或文档中,参见 CSV 转 Markdown 表格指南。
常见问题(FAQ)
CSV 和 TSV 的区别是什么?
CSV 使用逗号(,)作为分隔符,TSV 使用制表符(\t)。当数据内容中经常包含逗号(如地址、句子等文本)时,用制表符分隔的 TSV 可以减少双引号转义,更便捷。
Excel 保存 CSV 时中文乱码怎么办?
在 Excel 中保存时,选择"CSV UTF-8(逗号分隔)"而非"CSV(逗号分隔)",文件会以 UTF-8 BOM 格式保存,最新程序和 Excel 都能正确显示中文。如果是已有的 GB18030 文件,可以用文本编辑器(VS Code、记事本等)的"通过编码器重新保存"菜单转为 UTF-8。
CSV 文件有大小限制吗?
CSV 文件格式本身没有行数或文件大小限制。但用 32 位程序或 Microsoft Excel(最大 1,048,576 行、16,384 列)打开时,受软件自身限制的影响。
总结
- CSV 是用逗号分隔列、用换行分隔行的最简二维表格式。
- 按 RFC 4180 规范,包含逗号、换行、双引号的字段用双引号括起,双引号本身用
""转义。 - 中文环境中 GB18030/GBK 与 UTF-8 BOM 的差异容易导致 Excel 乱码,编码管理必不可少。全角逗号「,」混入也是常见坑。
- 需要层级结构或 API 传输时,用 CSV to JSON 转换器 轻松转换。