From 7954cd86e01ff032f8948c6ec921226ce40e304a Mon Sep 17 00:00:00 2001 From: mlboy Date: Tue, 9 Jun 2026 20:00:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(csv):=20=E5=8D=95=E5=85=83=E6=A0=BC?= =?UTF-8?q?=E5=90=AB=E5=9B=9E=E8=BD=A6=E7=AC=A6(\r)=E6=97=B6=E4=B9=9F?= =?UTF-8?q?=E9=9C=80=E5=8A=A0=E5=BC=95=E5=8F=B7=E8=BD=AC=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit escapeCell 仅对 " , \n 加引号,遗漏了 \r。含裸 \r 的单元格写入 CSV 后会被表格软件当作行终止符,导致数据错位。按 RFC 4180 补全。 Co-Authored-By: Claude Opus 4.8 --- src/utils/csv.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/csv.ts b/src/utils/csv.ts index 88cade1..9eddb09 100644 --- a/src/utils/csv.ts +++ b/src/utils/csv.ts @@ -2,7 +2,7 @@ const escapeCell = (v: any): string => { const s = v === null || v === undefined ? '' : typeof v === 'object' ? JSON.stringify(v) : String(v) - return /[",\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s + return /[",\r\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s } /** 将列名与行数据序列化为 CSV 文本 */