Unix Diff命令:不';t打印不同的行,但仍然表示这两个文件不同

Unix Diff命令:不';t打印不同的行,但仍然表示这两个文件不同,unix,diff,Unix,Diff,我正在使用diff命令比较两个文本文件。它们需要完全匹配 因此,我使用diff: diff binary.out binary.应为 (顺便说一下,这些文件不是二进制文件。它们是文本文件。我称它们为二进制文件,因为这是项目的名称) 得到 二进制文件Binary.out和Binary.out预期不同 当我使用另一个diff工具时,它是所有工具中最聪明的(也就是人类),这两个文件之间实际上没有什么不同 有人知道这里发生了什么吗 谢谢 确保忽略差异选项中的空白 它还可以看到Unicode字符并将其解释

我正在使用diff命令比较两个文本文件。它们需要完全匹配

因此,我使用diff:

diff binary.out binary.应为

(顺便说一下,这些文件不是二进制文件。它们是文本文件。我称它们为二进制文件,因为这是项目的名称)

得到

二进制文件Binary.out和Binary.out预期不同

当我使用另一个diff工具时,它是所有工具中最聪明的(也就是人类),这两个文件之间实际上没有什么不同

有人知道这里发生了什么吗


谢谢

确保忽略差异选项中的空白

它还可以看到Unicode字符并将其解释为二进制。查看您的diff工具是否有强制文本模式的选项。

diff
from介绍了以下关于文本/二进制的内容:

diff
通过检查 文件中的前几个字节;确切的字节数由系统决定 依赖,但通常是几千。如果每个字节 该文件部分为非空,
diff
认为该文件为空 文本;否则,它将文件视为二进制文件

因此,GNU diff对什么是文本有一个非常开放的定义,很少需要使用
--text
选项强制它将文件视为文本


您是否检查了
binary.out
binary.expected
是否包含空字符?您的diff程序是什么版本的?

diff
对“文本”的概念很狭隘。你可能有一些并不特别的字符:重音、回车。我认为我的文本文件没有特别的字符。它们只包含单词“二进制和”、数字“0”和“1”以及一些换行符。但即便如此,这也不能解释为什么diff认为我的文件是二进制文件。如果文件的每个字符串末尾没有LF/CR(换行/回车)序列,那么在Windows上,大多数文本编辑器都会将这些文件视为二进制文件。当您在文本模式下查看文本时,这些符号是不可见的,但是尝试在二进制模式下查看文件时,您应该会在每行的末尾看到0xD 0xA。或者,如果这两个文件都是在unix上创建的,并且windows或为windows配置的FTP从未接触过,则换行符仅为0xA。祝您好运。对您的文件进行二进制转储(使用
hextump
),99%的确定是您的生产过程在其中放置了一些\0字符,这些字符您看不到,但会让您认为它们是二进制文件。写文件时,忘记删除字符串/字符数组中的尾随零是常见的错误。