ASCII表格生成器

把纯文本、CSV 或表格数据一键转换成带边框、对齐整齐的 ASCII 表格,支持加号减号与 Unicode 制表符两种风格。

在输入区按 Ctrl / Cmd + Enter 即可生成;结果区已预填示例,可直接复制。

使用方法

  1. 把要排版的表格数据粘贴进「输入内容」,每行一条记录,列之间用同一个分隔符(如竖线、逗号、Tab)。
  2. 选择分隔符(默认自动检测)、边框风格(ASCII 或 Unicode 制表符)、对齐方式与内边距。
  3. 勾选「首行作为表头」会让第一行下面多出一条分隔线。
  4. 点击「生成表格」或在输入区按 Ctrl / Cmd + Enter,结果出现在下方等宽框内。
  5. 点「复制结果」即可粘贴到 Markdown、文档或终端;需要表格数据时也能导出 CSV。

能解决什么

写技术文档、README、邮件或终端说明时,手写对齐的表格很费眼睛,差一个空格就歪掉。这个 ASCII表格生成器把凌乱的文本、CSV 或日志数据整理成边框整齐、列对齐的纯文本表格,中英文混排也能对齐。它既适合快速美化一份清单,也适合在不能渲染 HTML 的环境(命令行、纯文本邮件)里呈现结构化信息。

原理和变量

ASCII表格生成器 的算法分三步:先把输入按行、再按分隔符切成二维单元格;对每一列取所有单元格里的最大显示宽度;最后用空格把每个单元格填充到该列宽度,并拼上角与连接符。关键在于「显示宽度」而非「字符数」——中文、全角标点与片假名在等宽字体里占 2 个格,英文与数字占 1 个格,若直接数字符,中文列会对不齐。

技术内核 6 问(仅对本页成立):

  1. 核心是「按列取最大显示宽度后填充」:用 Array.from(str).reduce 逐字符累加宽度,再用 String.prototype.repeat 拼出顶边与分隔边。
  2. 为什么 CJK 计 2:等宽终端里一个汉字占 2 个字符格,若用 String.length(按码点计 1)会导致中文列右对齐错位,所以显示宽度对 U+2E80–U+9FFF、U+F900–U+FAFF、U+FF00–U+FFEF、U+3000–U+303F 计 2。
  3. 遵循等宽字体排版约定(非强制国标),边框字符采用 7 位 ASCII 的 + - | 或 Unicode 制表符 U+2500–U+256C(┌─┐│├┼┤┬┴┼ 等)。
  4. 输入转换链:文本 → 按 \r?\n 分行 → 按选定分隔符 split → 各行补齐到最大列数 → 每列算最大显示宽度 → 按对齐填充空格 → 拼接角/连接符成行。
  5. 边界阈值:内边距限定 0–4(超出也夹取到该范围);分隔符自动检测优先级为 制表符 > 逗号 > 竖线 > 空格;某行列数少于最大列数时以空单元格补齐,不报错。
  6. 常见误用:用普通 String.length 而非显示宽度导致中文错位(本工具已修正);把输出当富文本粘贴到比例字体(必须用等宽字体或 <pre> 才能对齐);误用模板字符串拼接(本项目禁用,改用数组 join)。

完整示例

本 ASCII表格生成器以服务端直出的四行水果价目表为例,分隔符为竖线,内边距 1,左对齐,含表头。生成结果(已预填在结果框)为:

+--------+------+------+
| 名称   | 数量 | 单价 |
+--------+------+------+
| 苹果   | 3    | 5.5  |
| 香蕉   | 10   | 2.0  |
| 火龙果 | 6    | 8.8  |
+--------+------+------+

该表共 7 行,顶边字符数 24,整表含换行共 161 个字符;三列显示宽度分别为 6、4、4。「火龙果」三个汉字占 6 格,故第一列被拉宽到 6。切到 Unicode 风格则把 + - | 换成 ┌─┐│ 等制表符,行宽相同。

输入范围与对照表

输入范围:任意纯文本,列数由分隔符自动判定,无硬性上限;内边距 0–4;边框风格仅 ASCII 与 Unicode 两档。下表固定「1 表头 + 2 数据行」、每列标签为 ASCII 字符(宽 2),展示不同列数下生成的表格顶边字符数与总行数;点「加载更多」查看内边距为 0(无内边距)时的对比。

列数顶边字符数(内边距 1)输出总行数
2116
3166
4216
5266
6316
7366
8416
9466
10526
11586
12646
13706
276
3106
4136
5166
6196
7226
8256
9286
10326
11366
12406
13446

边界与精度

空输入会提示「请输入至少一行数据」;只有一列表格也能生成(顶边 12 字符、3 行)。单元格超长不会自动换行,只会把所在列拉宽,因此超长文本会撑大整表而不破坏对齐。内边距超出 0–4 会被夹取到范围内;分隔符自动检测按「在各行出现且列数最一致」的优先级选择,避免把正文里的逗号误判为分隔符。所有计算在本机浏览器完成,不上传服务器。

常见问题

中文为什么能对得齐?

因为列宽按「显示宽度」计算,汉字与全角字符计 2、英数计 1,填充时用对应数量的空格补齐,所以在等宽字体下中英文混排也能对齐。

ASCII 和 Unicode 风格选哪个?

ASCII 风格用 + - |,兼容性最好,任何环境都能正常显示;Unicode 风格用 ┌─┐│ 等制表符,更美观,但个别老旧终端可能显示异常,按使用场景选择。

分隔符怎么选才不串列?

默认「自动检测」会优先识别 Tab,其次逗号、竖线、空格,并选择让各行列数最一致的那个。若数据里本身含逗号,建议改用竖线或 Tab 并手动指定。

首行表头有什么用?

勾选后第一行被视为表头,其下方会多一条分隔线(连接符用 + 或 ┼),视觉上把标题与数据分开,类似 Markdown 表格的 separator 行。

内边距是什么?

内边距是单元格内容与左右边框之间的空格数,取值 0–4。设为 0 时表格最紧凑(如 2 列表顶边仅 7 字符),设为 4 时更透气但更宽。

能处理多少列、多少行?

没有硬性上限,列数和行数都由你的输入决定;列数越多顶边越长(13 列时顶边 70 字符)。仅受浏览器单次渲染性能限制。

结果可以导出吗?

可以。点「复制结果」复制纯文本表格;下方对照表支持「导出 CSV」与「复制对照表」(TSV),CSV 带 BOM 以防 Excel 中文乱码。

粘贴到别处为什么错位?

必须粘贴到等宽字体环境(如 <pre>、代码块、终端、记事本等宽模式)。比例字体(如普通 Word 正文)每个字宽度不同,视觉上会看起来不齐,但字符本身是对齐的。

相关工具