2

我有超过 5000 个文本文件在 Windows 中由我需要在 Mac OS X 机器上处理的 PDF 文件生成。我dos2unix在所有这些上运行以更正换行符并将编码从 UTF-16LE 转换为 UTF-8。

在 4949 个案例中一切正常,但是对于 320 个文件,dos2unix 跳过执行,说它们是二进制文件。

这与file -cdata为 320 个跳过的文件和其他文件的文本相一致。然而,它们是目视检查的文本......

320怎么修?起初我怀疑这是 BOM 的存在,但它也出现在没有给出问题的文件上。

此外,数据和文本文件都以:

0000000 ff fe 3d 00 20 00 70 00 61 00 67 00 65 00 20 00
0000010 31 00 20 00 3d 00 0a 00 0d 00 0d 00 0a 00

有什么提示吗?提前致谢。

4

3 回答 3

2

我发现有时文本文件包含不可打印的 ASCII 字符。在这种情况下,即使文件是“文本”文件,dos2unix 也认为它们是二进制文件。如果是这种情况,您可以使用以下tr命令:

tr -cd '\11\12\15\40-\176' < file.txt

这是基本命令,将清除那些不可打印的字符并将新的 ASCII 清除文本输出到标准输出。要实际将此输出保存为文件,只需将输出通过管道传输到文件:

tr -cd '\11\12\15\40-\176' < file.txt > newfile.txt

现在newfile.txt是您可以在其上运行的文本文件dos2unix

字符串的补码(即-c'\11\12\15\40-\176'意味着该tr命令会删除除该字符串中定义的字符之外的所有内容,这些字符是:

  • 八进制 \11:制表符
  • 八进制 \12:新行
  • 八进制 \15:回车
  • 八进制 \40-\176:所有好的/正常的键盘字符
于 2014-10-21T21:03:56.283 回答
0

根据dos2unix --help,您可以将参数--force传递dos2unix给“强制转换二进制文件”。因此,在您的 shell 中,在一个只有 320 个跳过文件的目录中,您可以键入dos2unix --force *.

于 2013-05-29T16:46:03.050 回答
0

您可以尝试最新版本的 dos2unix (6.0.3)。它将打印第一个二进制符号的行号。这可以帮助您分析问题。

此致,

于 2013-06-06T06:45:13.643 回答