存储包含无效字符的文件

存储包含无效字符的文件

我们从客户那里获得的一些文件无法正确处理,因为它们被声明为 US-ASCII 但包含无效字符。为了验证软件修复,我尝试将原始文件中的几行复制到新文件中。原始文件非常大,我只需要几行。

原始行在 gedit 中看起来像这样003002002002\D4M\D4红色部分,我收到有关无效字符的警告。在控制台上,原始行如下所示:003002002002�M

我尝试通过 head 和 tail 通过管道传输文件,但生成的文件包含一个“固定”字符而不是无效字符。

head -n 449025 invalid.txt | tail > invalid_short.txt

如果我捕获生成的文件,该行看起来像这样:003002002002�M 但是如果我用 gedit 打开生成的文件,它看起来像这样:003002002002ÔM并且没有无效字符

我尝试在 gedit 中选择行并将它们保存为新文件,但我只得到无效字符的表示,而不是原始字符。使用 cat 和 gedit 看起来像这样(没有无效字符警告,没有红色):003002002002\D4M

看起来我错过了一些简单的东西,但我不知道是什么。

谢谢

Ubuntu 16.04、zsh

答案1

headtail不会使固定/改变人物。

可能发生的情况是gedit尝试根据前几个字节猜测文件的编码。当 0xD4 距离文件较远时,gedit猜测文件采用 ASCII 或 UTF-8 格式,并在发现 0xD4 字节在 ASCII 或 UTF-8 格式中无效时发出抱怨。

而对于第二个较短的文件,由于 0xD4 接近文件的开头,因此gedit猜测字符集是某个 8 位字符集(可能是 iso8859-1,其中 0xD4 是 Ô)。

所以你的:

head -n 449025 invalid.txt | tail > invalid_short.txt

方法是正确的。如果您sed -n l在这两个文件上运行,您将在两种情况下看到类似003002002002\324M.与hd30 30 33 30 30 32 30 30 32 30 30 32 d4 4d |003002002002.M|

相关内容