mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-15 12:55:51 +00:00
新增 encoding.ts 核心模块实现三层编码检测(BOM → UTF-8 fatal → GBK 回退), 改造同步/异步读取路径和写入路径,使 FileReadTool/FileEditTool/FileWriteTool 能正确处理 GBK 编码文件。包含完整单元测试和 spec 文档。 Co-Authored-By: glm-5-turbo <zai-org@claude-code-best.win>
6.7 KiB
6.7 KiB
多编码文件工具 人工验收清单
生成时间: 2026-05-10 关联计划: spec/feature_20260510_F001_multi-encoding-file-tools/spec-plan.md 关联设计: spec/feature_20260510_F001_multi-encoding-file-tools/spec-design.md
所有验收项均可通过 Shell 命令自动化验证,无需人类参与。仍将生成清单用于自动执行。
范围变更: 仅保留 GBK 编码支持,Shift_JIS/EUC-JP/EUC-KR/Big5/GB18030 已移除。
验收前准备
环境要求
- [AUTO] 检查 Bun 运行时版本:
bun --version - [AUTO] 安装依赖:
bun install
测试数据准备
- [AUTO] 创建 GBK 编码测试文件:
bun -e "const fs = require('fs'); const b = Buffer.from([0xC4, 0xE3, 0xBA, 0xC3, 0xCA, 0xC0, 0xBD, 0xE7, 0x0A]); fs.writeFileSync('/tmp/test-gbk.txt', b)" - [AUTO] 创建 UTF-8 测试文件:
bun -e "require('fs').writeFileSync('/tmp/test-utf8.txt', 'Hello 世界\n')" - [AUTO] 创建 UTF-16LE 测试文件:
bun -e "const fs = require('fs'); const b = Buffer.from('Hello','utf16le'); fs.writeFileSync('/tmp/test-utf16le.txt', b)"
验收项目
场景 1:读取 GBK 编码文件(中文场景)
用户目标: 用户有一个 GBK 编码的中文文件,通过 FileReadTool 读取后看到正确的中文内容
触发路径:
- 系统检测到非 UTF-8 字节序列
- 编码回退识别为 GBK
- 用 GBK 解码输出中文文本
- [x] 1.1 GBK 文件同步读取
- 来源: spec-plan-acceptance.md §2 / spec-design.md §验收标准
- 目的: 确认 GBK 文件读取解码正确
- 操作步骤:
- [A]
bun -e "import { readFileSyncWithMetadata } from './src/utils/fileRead.js'; const r = readFileSyncWithMetadata('/tmp/test-gbk.txt'); console.log('encoding:', r.encoding); console.log('content:', r.content)"→ 期望包含:你好世界 - [A] 上条命令输出 encoding 字段 → 期望包含:
gbk
- [A]
- [x] 1.2 GBK 文件异步路径读取
- 来源: spec-plan-acceptance.md §6 / spec-design.md §验收标准
- 目的: 确认 readFileInRange fast path 支持 GBK
- 操作步骤:
- [A]
bun -e "import { readFileInRange } from './src/utils/readFileInRange.js'; const r = await readFileInRange('/tmp/test-gbk.txt', 0); console.log('content:', r.content); console.log('totalLines:', r.totalLines)"→ 期望包含:你好世界 - [A] 上条命令输出 totalLines → 期望包含:
1
- [A]
场景 3:写入非 UTF-8 编码文件
用户目标: 用户通过 FileEditTool/FileWriteTool 编辑 GBK 文件后写回,内容不损坏
触发路径:
- 系统检测原文件编码
- 编辑内容后写回
- 非标准编码回退为 UTF-8 写入(零依赖约束)
- [x] 3.1 GBK 文件写入(UTF-8 回退)
- 来源: spec-plan-acceptance.md §7 / spec-design.md §写入路径改造
- 目的: 确认非 UTF-8 编码写入不损坏内容
- 操作步骤:
- [A]
bun -e "import { writeTextContent } from './src/utils/file.js'; writeTextContent('/tmp/test-gbk-write.txt', '测试写入', 'gbk', 'LF'); const fs = require('fs'); const content = fs.readFileSync('/tmp/test-gbk-write.txt', 'utf8'); console.log('written:', content)"→ 期望包含:测试写入
- [A]
场景 4:UTF-8 文件读取回归
用户目标: 用户读取 UTF-8 文件,行为与改动前完全一致
触发路径:
- UTF-8 fatal 验证通过
- 内容正常输出
- [x] 4.1 UTF-8 文件读取回归
- 来源: spec-plan-acceptance.md §4 / spec-design.md §验收标准
- 目的: 确认 UTF-8 读取无回归
- 操作步骤:
- [A]
bun -e "import { readFileSyncWithMetadata } from './src/utils/fileRead.js'; const r = readFileSyncWithMetadata('/tmp/test-utf8.txt'); console.log('encoding:', r.encoding); console.log('content:', r.content)"→ 期望包含:Hello 世界 - [A] 上条命令输出 encoding 字段 → 期望包含:
utf
- [A]
场景 5:UTF-16LE 文件读取回归
用户目标: 用户读取 UTF-16LE(BOM)文件,行为与改动前完全一致
触发路径:
- BOM 检测层识别 FF FE 标记
- 用 UTF-16LE 解码
- [x] 5.1 UTF-16LE 文件读取回归
- 来源: spec-plan-acceptance.md §5 / spec-design.md §验收标准
- 目的: 确认 UTF-16LE BOM 读取无回归
- 操作步骤:
- [A]
bun -e "import { readFileSyncWithMetadata } from './src/utils/fileRead.js'; const r = readFileSyncWithMetadata('/tmp/test-utf16le.txt'); console.log('encoding:', r.encoding); console.log('content:', r.content)"→ 期望包含:utf-16le - [A] 上条命令输出 content 字段 → 期望包含:
Hello
- [A]
场景 6:编码检测性能
用户目标: 编码检测不应影响文件读取的响应速度
触发路径:
- 对 4KB 数据执行 1000 次检测
- 验证平均耗时 < 1ms
- [x] 6.1 检测性能基准
- 来源: spec-plan-acceptance.md §8 / spec-design.md §实现要点
- 目的: 确认编码检测性能达标
- 操作步骤:
- [A]
bun -e "import { detectEncoding } from './src/utils/encoding.js'; const buf = Buffer.alloc(4096, 0x41); const start = performance.now(); for (let i = 0; i < 1000; i++) detectEncoding(buf); const avg = (performance.now() - start) / 1000; console.log('avg:', avg, 'ms'); process.exit(avg < 1 ? 0 : 1)"→ 期望包含:avg:
- [A]
场景 7:构建和测试完整性
用户目标: 整体代码质量无退化,所有测试通过
触发路径:
- 执行完整 precheck(typecheck + lint + test)
- 确认零错误
- [x] 7.1 编码相关单元测试
- 来源: spec-plan.md Task 1-4 检查步骤 / spec-design.md §验收标准
- 目的: 确认编码相关测试全部通过
- 操作步骤:
- [A]
bun test src/utils/__tests__/encoding.test.ts→ 期望包含:0 fail - [A]
bun test src/utils/__tests__/fileRead.test.ts→ 期望包含:0 fail - [A]
bun test src/utils/__tests__/readFileInRange.test.ts→ 期望包含:0 fail - [A]
bun test src/utils/__tests__/file.test.ts→ 期望包含:0 fail
- [A]
验收后清理
- [AUTO] 清理临时测试文件:
rm -f /tmp/test-gbk.txt /tmp/test-utf8.txt /tmp/test-utf16le.txt /tmp/test-gbk-write.txt
验收结果汇总
| 场景 | 序号 | 验收项 | [A] | [H] | 结果 |
|---|---|---|---|---|---|
| 场景 1 | 1.1 | GBK 同步读取 | 2 | 0 | ✅ |
| 场景 1 | 1.2 | GBK 异步路径读取 | 2 | 0 | ✅ |
| 场景 3 | 3.1 | GBK 写入(回退) | 1 | 0 | ✅ |
| 场景 4 | 4.1 | UTF-8 回归 | 2 | 0 | ✅ |
| 场景 5 | 5.1 | UTF-16LE 回归 | 2 | 0 | ✅ |
| 场景 6 | 6.1 | 检测性能 | 1 | 0 | ✅ |
| 场景 7 | 7.1 | 编码单元测试 | 4 | 0 | ✅ |
验收结论: ✅ 全部通过