Skip to content

bug(portfolio-import): UTF-8 BOM 导致首列表头无法匹配别名 #407

Open
wannT-1/folio
#6

Description

@wannT-1

现象

Windows / Excel 导出的 CSV 常带 UTF-8 BOM(U+FEFF)。当前 parseCsv 在识别表头时,只对首行做 trim + 小写 + 去掉空格/下划线/连字符,不会剥掉 BOM。

于是第一列表头实际变成 \uFEFFsymbol(或 \uFEFF代码),对不上 HEADER_ALIASES,整行要么被当成「无表头」走位置回退,要么 symbol 列错位。

证据(当前 main)

packages/shared/src/portfolio-import/parsers.ts 中:

function normalizeHeaderCell(cell: string): string {
  return cell.trim().toLowerCase().replace(/[\s_\-]/g, '')
}

未处理 \uFEFF。splitCsvRows / splitCsvLine 也会把 BOM 留在第一个 cell 里。

复现

\uFEFFSymbol,Quantity,Cost
AAPL.US,10,100
  • 实际:首列表头匹配失败(或整表按无表头位置解析),Symbol 列识别不稳定。
  • 预期:BOM 被剥掉后,与无 BOM 的同内容 CSV 解析结果一致。

建议修复(小范围)

  • 在 normalizeHeaderCell(或 parseCsv 入口)去掉 leading \uFEFF。
  • 补一条 focused 回归:带 BOM 的英文/中文表头都能正确映射 symbol/quantity/cost。

范围

仅 portfolio-import 解析;不改 UI。与 #356–#360(币种/会计格式/全角/零宽/符号长度)不重叠——那些 PR 未覆盖 BOM。

查重

全状态搜索 BOM / \uFEFF / UTF-8 表头相关 open issue 未见同类。

Activity

  1. wannT-1 commented on Oct 30, 2026

    @wannT-1
    Author

    /claim

    我来修 UTF-8 BOM 表头匹配:在 normalizeHeaderCell(或 parseCsv 入口)剥掉 leading \uFEFF,并补英文/中文表头 focused 回归。提交 PR 时写 Closes #407。

  2. github-actions commented on Oct 30, 2026

    @github-actions

    @wannT-1 已认领该 Issue,并已自动设为 Assignee。提交 PR 时请在描述中写 Closes #407。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

claimedClaimed by a contributor and currently in progress

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions