FormatArc CSV to JSON 转换结果界面FormatArc CSV to JSON 转换结果界面
作者: FormatArc 编辑部发布日期: 2026-09-02更新日期: 2026-09-02

什么是 CSV?RFC 4180 格式、GB18030 与 UTF-8 编码入门 (2026)

什么是 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 会被去掉变成数字 71-2 这样的字符串可能被自动转成日期格式。

Google 表格中也可以通过"文件" > "下载" > "逗号分隔值(.csv)"菜单来导入和导出 CSV。

如果需要把 Excel 或 Google 表格中的数据直接以 Markdown 表格的形式贴进文档,参见 Excel 转 Markdown 表格

编码与中文乱码(GB18030 / GBK / UTF-8 BOM)

打开 CSV 文件时如果文字变成乱码,绝大多数情况是编码问题。CSV 格式本身没有存储编码信息的标准头或元数据区域(RFC 4180 也没有规定编码),所以读取文件的程序需要猜测编码或由用户手动指定。

中文环境的 CSV 特别容易出现编码差异导致的问题。

  1. GB18030 / GBK / GB2312:中文 Windows 版 Excel 默认保存的 CSV 文件通常使用 GB18030(或其子集 GBK)编码。用期望 UTF-8 的 Web 应用或 Linux 服务器读取时,中文就会变成乱码。
  2. UTF-8(无 BOM):现代开发环境的默认编码。但旧版 Excel 或默认设置的 Windows 版 Excel 打开时,可能按 GBK(ANSI)错误解析,导致中文乱码。
  3. 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.jsPapaParsecsv-parse
  • JavaApache Commons CSVOpenCSV

处理前先验证数据

从外部收到的 CSV 文件,应先验证所有行列数是否一致、必需的表头是否齐全、是否存在空单元格或意外的分隔符,再进入后续处理流程。这样可以减少下游管道中的错误。

用 FormatArc 把 CSV 转成 JSON

处理大体积 CSV 文件或重要业务数据时,可以用 CSV to JSON 转换器 安全地转换。

FormatArc CSV to JSON 转换结果界面FormatArc CSV to JSON 转换结果界面

  1. 打开 CSV to JSON 转换器
  2. 在左侧输入框粘贴 CSV 文本。
  3. 右侧窗口实时生成格式化后的 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 转换器 轻松转换。