使用方法
- 把要排版的表格数据粘贴进「输入内容」,每行一条记录,列之间用同一个分隔符(如竖线、逗号、Tab)。
- 选择分隔符(默认自动检测)、边框风格(ASCII 或 Unicode 制表符)、对齐方式与内边距。
- 勾选「首行作为表头」会让第一行下面多出一条分隔线。
- 点击「生成表格」或在输入区按 Ctrl / Cmd + Enter,结果出现在下方等宽框内。
- 点「复制结果」即可粘贴到 Markdown、文档或终端;需要表格数据时也能导出 CSV。
能解决什么
写技术文档、README、邮件或终端说明时,手写对齐的表格很费眼睛,差一个空格就歪掉。这个 ASCII表格生成器把凌乱的文本、CSV 或日志数据整理成边框整齐、列对齐的纯文本表格,中英文混排也能对齐。它既适合快速美化一份清单,也适合在不能渲染 HTML 的环境(命令行、纯文本邮件)里呈现结构化信息。
原理和变量
ASCII表格生成器 的算法分三步:先把输入按行、再按分隔符切成二维单元格;对每一列取所有单元格里的最大显示宽度;最后用空格把每个单元格填充到该列宽度,并拼上角与连接符。关键在于「显示宽度」而非「字符数」——中文、全角标点与片假名在等宽字体里占 2 个格,英文与数字占 1 个格,若直接数字符,中文列会对不齐。
技术内核 6 问(仅对本页成立):
- 核心是「按列取最大显示宽度后填充」:用
Array.from(str).reduce逐字符累加宽度,再用String.prototype.repeat拼出顶边与分隔边。 - 为什么 CJK 计 2:等宽终端里一个汉字占 2 个字符格,若用
String.length(按码点计 1)会导致中文列右对齐错位,所以显示宽度对 U+2E80–U+9FFF、U+F900–U+FAFF、U+FF00–U+FFEF、U+3000–U+303F 计 2。 - 遵循等宽字体排版约定(非强制国标),边框字符采用 7 位 ASCII 的
+ - |或 Unicode 制表符 U+2500–U+256C(┌─┐│├┼┤┬┴┼ 等)。 - 输入转换链:文本 → 按
\r?\n分行 → 按选定分隔符 split → 各行补齐到最大列数 → 每列算最大显示宽度 → 按对齐填充空格 → 拼接角/连接符成行。 - 边界阈值:内边距限定 0–4(超出也夹取到该范围);分隔符自动检测优先级为 制表符 > 逗号 > 竖线 > 空格;某行列数少于最大列数时以空单元格补齐,不报错。
- 常见误用:用普通
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) | 输出总行数 |
|---|---|---|
| 2 | 11 | 6 |
| 3 | 16 | 6 |
| 4 | 21 | 6 |
| 5 | 26 | 6 |
| 6 | 31 | 6 |
| 7 | 36 | 6 |
| 8 | 41 | 6 |
| 9 | 46 | 6 |
| 10 | 52 | 6 |
| 11 | 58 | 6 |
| 12 | 64 | 6 |
| 13 | 70 | 6 |
| 2 | 7 | 6 |
| 3 | 10 | 6 |
| 4 | 13 | 6 |
| 5 | 16 | 6 |
| 6 | 19 | 6 |
| 7 | 22 | 6 |
| 8 | 25 | 6 |
| 9 | 28 | 6 |
| 10 | 32 | 6 |
| 11 | 36 | 6 |
| 12 | 40 | 6 |
| 13 | 44 | 6 |
边界与精度
空输入会提示「请输入至少一行数据」;只有一列表格也能生成(顶边 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 正文)每个字宽度不同,视觉上会看起来不齐,但字符本身是对齐的。