web-dev-qa-db-ja.com

WinSCPは、ファイルの改行を台無しにします–どのように回避しますか?

WinSCPが改行を台無しにする方法にかなりうんざりしています。

this is line 1
this is line 2

になります

this is line 1

this is line 2

FTPにはFileZillaを、SCPにはPuTTYを使用することもできますが(PuTTYで処理できると思います)、それはかなり面倒です。どうすればこの問題を軽減できますか?

5
Lars

acidzombie24が残したコメントが最善のアドバイスだと思います。個人的には、WinSCPよりも優れたFTPプログラムに出くわしたことはありません。バイナリを使用して転送するように設定を変更し、社内エディターではなくNP ++などのエディターを使用することをお勧めします。

ここにいくつかのスクリーンショットがあります:

Binary Transfer

Editor

10
Merlin

WinSCPの編集バージョンFAQ ファイルの転送または編集後にテキストファイルの改行が間違っているのはなぜですか?

特にその 既知の問題 セクションを参照してください。


ファイルを転送または編集した後、改行が間違っている場合があります。これは次のように表示されます。

  • 改行は失われます。ファイルの内容全体が1行にあるように見えます。
  • 改行が重複しています。すべての行の間に追加の空の行があるようです。
  • すべての行の終わりに奇妙な記号/文字があります。

テキストファイル形式

プラットフォーム(オペレーティングシステム)が異なれば、使用するテキストファイルの形式も異なります。最も一般的な形式は、UnixおよびWindows形式です。主な違いは、行の終わりを示すために異なる文字または文字のシーケンスが使用されることです。 Unixでは、LF文字(\n0A、または10進数で10)です。Windowsでは、CRとLF(\r + \n0D + 0Aまたは10進数で13+ 10)。

今日の多くのアプリケーションとシステムは両方の形式で動作できますが、特定の形式を必要とするものもあります。別の形式でファイルを表示すると、上記のように正しく表示されません。

テキスト/ ASCII転送モード

このため、ファイル転送クライアントおよびサーバーは、text/ASCII 転送モード をサポートします。このモードでファイルを転送すると、ファイルは(理想的には)ソースシステムにネイティブな形式からターゲットシステムにネイティブな形式に変換されます。たとえば、テキストモードを使用してテキストファイルをWindowsからUnixシステムにアップロードすると、ファイルの行末がCR + LFからLFに変換されます。

WinSCPは、デフォルトですべてのファイルにバイナリ転送モードを使用します。 テキスト/ ASCII転送モードを使用 に構成する方法を学びます。 正しいサーバー側のテキストファイル形式 を構成する必要がある場合もあります。

逆に、WinSCPにバイナリモードを強制的に使用させたい場合は、テキストエディタでファイルを編集する場合でも、外部テキストエディタ(WinSCP内部エディタはUnixファイル形式をサポートしていません)を使用してWinSCPを構成する必要があります 編集されたファイルにテキストモードを強制しない 。また、外部テキストエディタがファイルを必要な形式で保存していることを確認してください(最近のほとんどのテキストエディタは、エディタが実行されるプラットフォームに固有の形式だけでなく、さまざまなテキストファイル形式をサポートしています)。

転送モードに関する既知の問題

  • Pure-FTPd FTPサーバー:テキスト/ ASCIIモードでWindows行末(CR + LF)のファイルをダウンロードすると、サーバーはLFをCR + LFに置き換え、誤ったCRになります+ CR +LF。WinSCPの内部エディタでこのようなファイルを開くと、エディタはシーケンスを2つの行末(CRとCR + LF)として解釈し、すべてのコンテンツ行の後に空白行をもたらします。ファイルが保存されると、内部エディタは、2つのWindows行末CR + LFとCR + LFを保存します。アップロード時に、2つのLFに変換されます。回避策は、外部エディタを使用して、WinSCPを確認することです 編集されたファイルにテキストモードを強制しません

テキストファイル変換のデバッグ

テキスト/ ASCII転送モードを有効(または無効)にしても問題が解決せず、転送/編集されたファイルがターゲットシステムによって正しく認識されない場合は、ファイルがどのステップで正しく変換されなかったかを確認する必要があります。変換されました)。

Windows上のファイルで使用されている行末を検出するには、PowerShellコンソールで次のコマンドを使用して、指定されたファイルの最初の100文字の16進ダンプを表示します(example.txt)。

Get-Content -Encoding Byte -TotalCount 100 example.txt |% {Write-Host ("{0:x2} " -f $_) -NoNewline}; Write-Host

Windows形式で以下の内容のファイルの場合

One
Two

表示されます:

4f 6e 65 0d 0a 54 77 6f 0d 0a

Windows形式を示す2つのシーケンス0d 0a(CR + LF)に注意してください。

Unix/Linuxシステム上のファイルで使用されている行末を検出するには、次のコマンドを使用します。

xxd example.txt | head

(代替はhexdump example.txt | headまたはod example.txt | headです。)

上記と同じファイルの場合、Unix形式で、次のように表示されます。

0000000: 4f6e 650a 5477 6f0a                      One.Two.

Unix形式を示す文字0a(LF)に注意してください。

リモートシステムへのシェルアクセス権がない場合は、バイナリエンコーディングを使用してファイルをダウンロードし、ローカルのバイナリ同一コピーでPowerShellコマンドを使用します。

これらの手法を使用して、ソースファイルと宛先ファイルの両方の形式を検出します。ファイルを編集するときは、エディターによって保存された、編集されたファイルのローカル一時コピーの形式も検出します。 一時コピーの場所 の設定を参照してください。

サポートのリクエスト

上記が問題の理解に役立たず、さらにサポートを求めることにした場合は、ソースファイルと宛先ファイルの両方のコピーを含むすべての調査結果を含めてください。ファイルを編集するときは、エディターによって保存されたローカルの一時コピーも含めてください。理想的には、リクエストをサポートするためにファイルを添付するときに、ブラウザがファイル形式を変更しないようにファイルを圧縮(Zip)します。


(私はWinSCPの作者です)

4
Martin Prikryl

===私の唯一の解決策===

メソッド1:

-ファイルを開き(メモ帳++を使用)、"検索と置換"ウィンドウ[Ctrl + F]([検索モード]の[拡張]をオン)を開き、次のように入力します\ r\n 1行目、\ n 2行目で、"すべて置換"をクリックして[保存]をクリックします。

方法2:

-in "Preferences> Transer> Default" select "Automatic(Transfer Mode)";
-次に、 "Text"ウィンドウで、そのような条件を設定します(ただし、十分にテストしていません)。 enter image description here

だから、今あなたの問題は修正されるかもしれません。新しい行はデフォルトで(場合によっては)WINSCPによって削除されるため、多くの人がこの問題を抱えています。

0
T.Todua

ここで二重の改行はもうありません。私の解決策は、エディター設定で「外部エディターのファイルのテキスト転送モードを強制する」のチェックを外すことでした。

0
knalle