文本文件兼容性预检

粘贴文本或选择纯文本文件,检测编码、换行和空白差异如何影响 Git、diff 工具、CI、Windows 记事本或旧版 Unix 工具,即使文件在编辑器中看起来完全正常。

在您的浏览器中本地处理。文件绝不会被上传。

使用方法 工具

  1. 粘贴文本或选择 .txt/.csv/.log/纯文本文件;浏览器在本地读取,不会上传。
  2. 选择“检查兼容性”。
  3. 查看每个标记问题、为何影响可移植性以及可能影响哪些工具。
  4. 若提供组合式安全改写,可一次规范化换行、移除开头 BOM、裁掉尾随空白、补上末尾换行并修正相似空白字符。

假设条件

来源与参考数据

方法说明

逐行拆分文本,同时保留每行原始结束符(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 空格。

实用指南
常见错误

常见问题

为什么混合换行和单独 CR 是错误,而尾随空白只是信息提示?

混合或单独 CR 换行会导致 Git、diff 和许多解析器误读文件结构,是功能问题而非风格偏好。尾随空白不可见且不妨碍阅读,只可能在格式化工具或 linter 中造成噪声,因此影响较小。

为什么工具不会自动修复混合制表符/空格缩进?

正确转换需知道原文件预期制表符宽度,例如每个制表符对应 2、4 或 8 列;仅凭文本无法推断。猜错会静默改变视觉结构,因此工具只指出具体行。

工具能检测文件原本以什么编码保存吗?

不能。工具收到文本时,浏览器已用自己的编码推断(或你指定的编码)将字节解码为 JavaScript 字符串。只能通过留下的 U+FFFD 检测解码失败的迹象,不能检查原始字节。

为什么 CRLF 和 LF 混合会造成嘈杂 diff?工具检测什么?

按行工具可能将结束字节不同但文本相同的行视为变更,使小改动看起来像整文件变化。本预检检测 CRLF/LF 混用、单独 CR 换行及开头 BOM、尾随空白、缺少末尾换行等列出的问题。它分析浏览器解码后的文本,不分析原始文件字节或所有可能的文本文件问题。

上次审核: 2026-09-26

这是窄范围的按行/字符扫描器,不是字节级编码检测器:处理浏览器已解码的文本,无法识别文件原始编码或恢复先前解码时丢失的数据。只识别八类问题;不分析代理对、组合字符规范化形式或从右向左书写标记等其他编码边界情况。

此工具 根据上述假设提供参考估算值。

主题和工具偏好设置,以及已保存和最近使用的列表仅存储在此浏览器中。