我使用ftp-get函数从服务器下载图像。但偶然我使用FTP_ASCII模式,所以我有一个问题。无法读取图像,存在一些错误。
我无法再次下载图片。 任何人都知道如何将这些文件转换为二进制形式,或如何修复这些文件?
答案 0 :(得分:2)
由于ASCII模式与二进制模式相比的工作方式,无法保证修复文件。
FTP ASCII模式旨在将行结尾转换为源操作系统和目标操作系统之间的相应类型。在* nix和Windows之间进行转换时,此处完成的最常见转换是\n
(0x0a
)变为\r\n
(0x0d0a
),反之亦然。
假设我们正在将一些图像从Linux服务器传输到Windows机器,我们不小心使用了ASCII模式。 FTP客户端正在查找传入数据中的任何\n
序列,并将其转换为保存到磁盘的数据中的\r\n
。这意味着二进制数据中的任何位置都有一个0x0a
,它在新数据中变为0x0d0a
。但它不会将现有\r\n
转换为\r\r\n
- 这将保持不变。没问题,你可能会想,我只是将所有0x0d0a
转换回0x0a
,文件将被修复。但是等等......如果现有的\r\n
序列没有被转换,那么它们将在这个新的转换过程中以错误的方式转换。
缺点是你数据不可挽回地被破坏了。获得正确数据的唯一100%保证方法是以二进制模式将它们再次从服务器复制。
答案 1 :(得分:0)
正如其他人所说,数据已损坏且可能无法恢复。
然而,0x0D 0x0A并不是大多数二进制文件格式中特别常见的字节序列[引用需要!],因此值得一试,将其替换为是否修复该文件。
fixgz utility就是这么做的。尽管它的名字,它没有.gzip文件的特定内容,可以在任何文件上使用。
祝你好运!