文本文件兼容性预检
粘贴文本或选择纯文本文件,检测编码、换行和空白差异如何影响 Git、diff 工具、CI、Windows 记事本或旧版 Unix 工具,即使文件在编辑器中看起来完全正常。
在您的浏览器中本地处理。文件绝不会被上传。
使用方法 工具
- 粘贴文本或选择 .txt/.csv/.log/纯文本文件;浏览器在本地读取,不会上传。
- 选择“检查兼容性”。
- 查看每个标记问题、为何影响可移植性以及可能影响哪些工具。
- 若提供组合式安全改写,可一次规范化换行、移除开头 BOM、裁掉尾随空白、补上末尾换行并修正相似空白字符。
假设条件
- 输入已由浏览器通过文件输入 `.text()` 或粘贴内容解码为 JavaScript 字符串。本工具分析解码后的文本,而非原始文件字节,因此不能直接检测原始字节级编码。
- 识别八类问题:CRLF/LF 混合、单独 CR 换行、开头 BOM、Unicode 替换字符、尾随空白、缺少末尾换行、制表符与空格混合缩进、视觉相似的 Unicode 空白字符。其他文本编码问题不在范围内。
- Unicode 替换字符(U+FFFD)表示分析前已发生解码失败;无法从文本恢复原始字节,因此不会对此问题提供改写。
来源与参考数据
方法说明
逐行拆分文本,同时保留每行原始结束符(CRLF、LF、单独 CR 或无),以便在规范化时不丢失检测混合换行所需的信息。随后针对这些行和字符数据执行八项有文档记录的检查。组合式改写仅处理机械上安全、无歧义的问题:换行规范化、去除 BOM、裁掉尾随空白、添加末尾换行,以及替换/移除相似空白字符。替换字符(数据已丢失,无法修复)和混合缩进(正确修复取决于未知的制表符宽度惯例)只标记,不自动改写。
计算示例
在 Windows 和 Unix 上编辑过、混有 CRLF 与 LF 的文件
输入项: 第一行\r\n第二行\n
结果: Git 和其他按行比较的 diff 工具会比较行结束符,因此即使只有一行内容改变,也可能显示所有行都已改变。标记为错误,并可安全统一为 LF。
shebang 前有 UTF-8 BOM
输入项: \uFEFF#!/bin/sh\necho "Hello"
结果: `#!/bin/sh` 前的 BOM 会使许多 Unix shell 无法识别 shebang。标记为警告,并可安全移除开头 BOM。
复制粘贴的普通空格位置被不换行空格(U+00A0)替代
输入项: const total = price + tax;
结果: 多数编辑器和字体中看起来像普通空格,但精确匹配与解析会将其视为不同字符。标记为警告,并可安全替换为普通 ASCII 空格。
实用指南
- 配置编辑器和 Git 的 `core.autocrlf` 或 `.gitattributes`,为仓库固定一种换行约定,而不是事后手动修复混合换行。
- 将 Unicode 替换字符视为数据丢失事件,而非格式问题;应重新导出或用正确编码重新打开源文件,不要试图修补已经损坏的解码文本。
- 处理从文字处理器、PDF 或网页复制的文本时,在编辑器启用空白/不可见字符显示;这是不换行空格和零宽空格最常见的来源。
- 根据项目约定统一使用空格或制表符缩进,并通过格式化工具执行,不要依赖每个人的编辑器设置碰巧一致。
常见错误
- 认为编辑器中看起来正常就没有问题;多数编辑器会规范化显示中的 CRLF/LF 并隐藏尾随空白,直到 Git、CI 或其他工具产生分歧才会暴露。
- 发生替换字符损坏后手动重打文本,而不是回到原始源文件;已解码文本中被替换的具体字节确实无法恢复。
常见问题
为什么混合换行和单独 CR 是错误,而尾随空白只是信息提示?
混合或单独 CR 换行会导致 Git、diff 和许多解析器误读文件结构,是功能问题而非风格偏好。尾随空白不可见且不妨碍阅读,只可能在格式化工具或 linter 中造成噪声,因此影响较小。
为什么工具不会自动修复混合制表符/空格缩进?
正确转换需知道原文件预期制表符宽度,例如每个制表符对应 2、4 或 8 列;仅凭文本无法推断。猜错会静默改变视觉结构,因此工具只指出具体行。
工具能检测文件原本以什么编码保存吗?
不能。工具收到文本时,浏览器已用自己的编码推断(或你指定的编码)将字节解码为 JavaScript 字符串。只能通过留下的 U+FFFD 检测解码失败的迹象,不能检查原始字节。
为什么 CRLF 和 LF 混合会造成嘈杂 diff?工具检测什么?
按行工具可能将结束字节不同但文本相同的行视为变更,使小改动看起来像整文件变化。本预检检测 CRLF/LF 混用、单独 CR 换行及开头 BOM、尾随空白、缺少末尾换行等列出的问题。它分析浏览器解码后的文本,不分析原始文件字节或所有可能的文本文件问题。
上次审核: 2026-09-26
这是窄范围的按行/字符扫描器,不是字节级编码检测器:处理浏览器已解码的文本,无法识别文件原始编码或恢复先前解码时丢失的数据。只识别八类问题;不分析代理对、组合字符规范化形式或从右向左书写标记等其他编码边界情况。
此工具 根据上述假设提供参考估算值。
主题和工具偏好设置,以及已保存和最近使用的列表仅存储在此浏览器中。