Gemini CLI PR 修复:UTF-16/32 空白文件被误判非空

jesussamuel-byte · ghdev · 2026-10-13

google-gemini/gemini-cli 的一个 PR(#29722)修复了文件空判定的编码 bug:原先 isEmpty() 总是按 UTF-8 解码采样字节,而 UTF-16/UTF-32 里空白字符是 2 或 4 字节宽,按 UTF-8 解码后会留下 trim() 无法去除的 NUL 字符,导致只含空白的 UTF-16/32 文件(带 BOM)被误判为非空,validatePlanContent() 也会错误接受这种空白计划文件。

修复方式是新增 decodeBOMContent 辅助函数,按 BOM 检测到的编码(UTF-8、UTF-16 LE/BE、UTF-32 LE/BE)正确解码,并让 readFileWithEncoding() 复用同一逻辑避免两处行为漂移。decodeUTF16BE 也改为忽略不完整的尾部码元而非抛错,以免含文本的文件被兜底误判为空。行为不变的部分:仅采样前 1 KB、无 BOM 文件仍按 UTF-8 解码。附带了覆盖各编码的测试。

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →