dos2unix修改二进制文件 - 为什么

时间:2015-12-14 00:03:30

标签: centos6 line-endings dos2unix

默认情况下,它不应该影响二进制文件。

我在带有图像的文件夹中对其进行了测试,虽然大多数图像都没有受到影响,如果dos2unix无法从文本文件中分辨出二进制文件,我是否必须专门包含和/或排除某些文件扩展名才能使其正常工作?

注意:当我在任何一个jpgs上运行file image.jpg时,无论它是否被修改,结果都是:

JPEG image data, JFIF standard 1.01

2 个答案:

答案 0 :(得分:4)

这是dos2unix程序源代码的相关部分:

if ((ipFlag->Force == 0) &&
      (TempChar < 32) &&
      (TempChar != 0x0a) &&  /* Not an LF */
      (TempChar != 0x0d) &&  /* Not a CR */
      (TempChar != 0x09) &&  /* Not a TAB */
      (TempChar != 0x0c)) {  /* Not a form feed */
        RetVal = -1; 
        ipFlag->status |= BINARY_FILE ;
        if (ipFlag->verbose) {
          if ((ipFlag->stdio_mode) && (!ipFlag->error)) ipFlag->error = 1;
          d2u_fprintf(stderr, "%s: ", progname);
          d2u_fprintf(stderr, _("Binary symbol 0x00%02X found at line %u\n"),TempChar, line_nr);
        }
        break;
      } 

似乎如果文件具有其他控制字符,则将其视为二进制文件并跳过,否则将其作为文本文件处理。因此,如果二进制文件(例如图像)不包含这些字符,则它将被破坏。

答案 1 :(得分:2)

没有&#34;二进制&#34;或&#34;文字&#34;原则上的文件 - 所有文件只是一个字节序列。

大多数尝试检测它们的程序只是使用某种启发式来排除包含文本异常字符的文件(通常是字符&lt; 32)或者不包含通常在文本中找到的字符(例如,空格) ,如@ Andrey的回答所示。

这只是为了避免意外错误而给你带来的善意,但是没有任何形式的保证,因为它完全可以拥有&#34;二进制&#34;只使用ASCII字符的文件(它易于构建,比如通过上述测试的PPM和COM文件)。