web-dev-qa-db-ja.com

ASCII vsバイナリvs自動?

サーバー間でファイルを転送していて、元々あった改行や改行ではなく、一部が1つの長い連続行に変更されていることに気づきました。これは、元々「自動」に設定されていたFTPクライアントの転送タイプに何らかの関係があると思いますが、追加オプションとして「バイナリ」と「ASCII」を使用しています。

簡単に言えば、あるサーバーから別のサーバーにファイルを転送する方法の違いは何ですか?これらの違いは、上で述べたような方法でファイルを変更することができますか?

転送中[〜#〜] from [〜#〜] Windows [〜#〜] to [〜#〜] Linux。

16
Sampson

FTPの「バイナリ」転送モードは、バイト単位でファイルを正確にコピーします。シンプルでわかりやすい。

ただし、異なるオペレーティングシステム間でテキストファイルを持ち込む場合、これは望ましくない場合があります。オペレーティングシステムによって、改行を表すために異なるコードが使用されます。 「ASCII」モードはこの目的のために存在します。すべての行末をソースシステムの形式から宛先の形式に自動的に変換します。

「自動」についてはわかりませんが、ファイルの拡張子などがテキストファイルであるかどうかを判断するために似ていると思われ、適切なモードを推測しようとします。

どちらのモードを使用するかは、ファイルをどのように処理しているかによって異なります...ファイルをコピーしてバックアップするだけの場合は、バイナリモードでコピーして、ファイルがまったく同じになるようにする必要があります。後でそれらを再びWindowsサーバーに復元します。両側でテキストファイルとして(おそらくクロスプラットフォームプログラムの構成ファイルとして)使用できるようにする必要がある場合は、ASCIIモードを使用して翻訳することをお勧めします。

編集:私が知る限り、WindowsからLinuxにファイルをFTP転送しても、改行が消えることはありません...ただし、それらをASCIIモードでコピーしてから、それらをbackバイナリモードでWindowsサーバーに戻す場合、 Linuxスタイルの行末はWindowsボックスで認識されない可能性があります(メモ帳には表示されず、ワードパッドには表示されます。他のソフトウェアではYMMVが表示されます)。

(今日、このような便利な機能-行末を自動的に変換すること)は、FTPのような基本的なプロトコルでは奇妙に思えるかもしれません。これは可能な限り簡単です。)

27
Josh

確かに違いがあり、バイナリオプションを使用しない限り、プレーンテキスト以外のファイルの転送が混乱します。

3
Chopper3

WindowsとUnixでは、行末のバイトが異なります(Windowsは0D 0A hex、UNIXは0Aのみ)。バイナリモードでファイルを転送する場合、ファイルのバイト数は変更されずに1台のコンピューターから移動されます。これはバイナリ形式(Zipファイル、画像など)に必要ですが、テキストファイルで問題が発生する可能性があります。 Windowsのnotepad.exeは、UNIXスタイルの改行を1つの長い行として含むテキストファイルを表示します。UNIXエディターでは、Windowsスタイルを表示すると、すべての行の末尾に^ Mが表示されることがあります。

したがって、技術的にはバイナリ形式(Zip、jpg、png、その他の無限)ではFTPをBINARYに設定する必要があり、テキスト形式(HTML、PHP、CGIなど)ではASCIIに設定する必要があります。

ほとんどの優れたFTPプログラムには自動設定もあります。つまり、よく知られているファイル拡張子に応じてモード(BINARYまたはASCII)を決定します。 JPGファイルの転送を自動的にバイナリに切り替え、PHPファイルをASCIIモードで送信/受信します。

1
Yamodax

どのオペレーティングシステムとの間でファイルを転送していますか? Linux/UnixはWindowsとは異なる改行を使用します。そのため、Linuxコンピューターでファイルを生成してWindowsで開くと、奇妙に見える場合があります。これを修正するユーティリティがありますが、私の経験では、メモ帳の代わりにワードパッドをWindowsで使用する場合は問題ありません。

1
einstiien