電子書籍の厳選無料作品が豊富!

こんにちは

今本来バイナリーとしてダウンロードすべきファイル(hogehoge.tar.gz)を
ASCIIモードでftpで取得してしまいました。

元ファイルを消してしまったので、今はそれをgz+tarで解凍しようとしても
エラーが出てしまいます。

このファイルをASCII ->binaryファイルに戻す方法はないでしょうか?
(多分改行コードや、文字コードを変換すればいいと思うのですが・・・)

シェルスクリプトでも、プログラムでもLINUX、WINDOWS、MACで動くものなら
もんだいありません。

よろしくお願い致します。

A 回答 (5件)

無理と言えば無理なのですが、場合によっては不可能というわけでも無い。

文字コードまで変換したのなら実質的には無理ですが。

例えば、Unix上のftpサーバーからWindowsへダウンロードしたとすると、0x0A というバイトが、0x0D 0x0A と2バイトになります。なので、0x0D 0x0A という並びを探して 0x0A に直せば良い。
ただ、ftpソフトによって元データに 0x0D 0x0A という並びがあった時に 0x0D 0x0D 0x0A にしてくれるのか、0x0D 0x0A のままにするのか両方ありそう。もし後者なら大変。

逆のWindows→Unixは大変。0x0A というバイトがあった場合にそれは元々 0x0A であった場合もあれば、0x0D 0x0A という2バイトであった場合もある。ファイル中に 0x0A が100個あれば、元は何だったか、2の100乗パターンの可能性があるので、全パターンを試せばどれか当たりです。実質無理。

文字コード変換までしていた場合には、逆に変換すれば大部分は大丈夫ですが、不正な文字コードと判断された部分は変換されなかったりするはずなので、元がどうだったのかは、膨大な組み合わせパターンになると思います。実質無理。不正な文字コードが削除されたり、「?」に置き換えられたりする仕様なら原理的に復元不可能になりますね。

ということで、もし、Unix/Linux→Windowsであったのなら、
Unix/Linuxで、
perl -e 'undef $/;$_=<STDIN>;s/\r\n/\n/g;print;' <inputfile >outputfile
で変換してみて、いければラッキー。だめならあきらめる。
    • good
    • 0

他の方もおっしゃっていますが不可能です。



もし可能であるならftpサーバにASCIIモードでputして
バイナリモードでgetすればいいですよね。
でもできないでしょ?
    • good
    • 0

>今本来バイナリーとしてダウンロードすべきファイル(hogehoge.tar.gz)をASCIIモードでftpで取得してしまいました。


ダウンロードしたファイルは元のものと一致しませんので、正しい方法(binary)でダウンロードし直してください。

>このファイルをASCII ->binaryファイルに戻す方法はないでしょうか?
ASCIIファイルは途中にEOF(End Of File)があるとそれから後は読み込まずに終了します。
Binaryファイルはファイルサイズ通りに取り込みますので元のファイルと同じです。
従って、コード変換だけではダウンロードしたファイルを修正できません。
    • good
    • 0

>多分改行コードや、文字コードを変換すればいいと思うのですが・・・



それは、論理的に不可能です。

プログラムは「変換後のバイト並びがあったら、変換前のバイト並びに入れ替える」という物になるでしょう。

もし、バイナリファイルの中に「元々、変換後のバイト並びと同じ並びの物があった」場合、変換をしてしまうと「変換後のバイト並びのまま変更しなくても良いのに、変換前のバイト並びに入れ替えられてしまう」と言う事が起きます。

具体例を出すと、以下のようになります。

例:

「こっちこい、こっちこい、いけのこい」と言う文章を考えます。(こっち来い、こっち来い、池の鯉)

うっかり間違って、「こい」を「いけ」に変換してしまったとします。

文章は「こっちいけ、こっちいけ、いけのいけ」になります。

元に戻そうとして「いけ」を「こい」に再変換します。

文章は「こっちこい、こっちこい、こいのこい」になります。

どうです?元に戻りましたか?戻ってないですよね?「こいのこい」になってるの判りますか?

このように、うっかりバイナリファイルをASCII変換してしまうと、逆変換を行っても、元に戻す事は不可能なのです。
    • good
    • 0

あきらめてダウンロードし直してください.

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!