WinSCP verschraubt Zeilenumbrüche in Dateien - wie vermeiden Sie das?

7363
Lars

Ich bin ziemlich satt, wie WinSCP Zeilenumbrüche repariert.

this is line 1 this is line 2 

Wird in verwandelt

this is line 1  this is line 2 

Ich könnte FileZilla einfach für FTP und Putty für SCP verwenden (ich denke, Putty kann damit umgehen), aber das ist ziemlich ärgerlich. Wie kann ich dieses Problem mildern?

5
Sie können in die Einstellungen gehen und es haben, binär statt automatisch zu verwenden. Auch wenn Sie einen externen Editor verwenden (wie ich es bin), stellen Sie sicher, dass er sich auch nicht damit beschäftigt. Meiner hat mir noch nie ein Problem gegeben (ich verwende den Programmierer notepad aka pnotepad) vor 13 Jahren 1
Also wo ist Lars? Schlagen und teilen ejbytes vor 7 Jahren 0

4 Antworten auf die Frage

9
Merlin

Ich würde sagen, dass der Kommentar von acidzombie24 der beste Rat ist. Ich persönlich habe kein besseres FTP-Programm gefunden als WinSCP. Ich empfehle Ihnen, Ihre Einstellungen für die Übertragung mit Binary zu ändern und einen Editor wie NP ++ anstelle des internen Editors zu verwenden.

Hier sind ein paar Screenshots:

Binary Transfer

Editor

Ich fügte Merlins Antwort hinzu und korrigierte dies, indem ich die Übertragungsvorgaben von Binär auf Automatisch umstellte. desbest vor 10 Jahren 0
Außerdem müssen Sie sicherstellen, dass der "Text" -Modus nicht für Ihren externen Editor erzwungen wird. Gehen Sie zu Editoren, klicken Sie auf Ihren Editor, klicken Sie auf Bearbeiten ... und stellen Sie sicher, dass "Textübertragungsmodus erzwingen" deaktiviert ist Vigrond vor 9 Jahren 0
3
Martin Prikryl

Redigierte Version der WinSCP-FAQ Warum sind Zeilenumbrüche in Textdateien falsch, nachdem die Datei übertragen oder bearbeitet wurde?

Siehe insbesondere den Abschnitt " Bekannte Probleme ".


Nach dem Übertragen oder Bearbeiten einer Datei kann es vorkommen, dass Zeilenumbrüche falsch sind, was sich wie folgt manifestieren kann:

  • Zeilenumbrüche gehen verloren. Es scheint so, als ob sich ein ganzer Dateiinhalt in einer einzelnen Zeile befindet.
  • Zeilenumbrüche werden dupliziert. Es scheint, als gäbe es zwischen jeder Zeile eine zusätzliche leere Zeile.
  • Am Ende jeder Zeile befindet sich ein seltsames Symbol / Zeichen.

Textdateiformate

Verschiedene Plattformen (Betriebssysteme) verwenden ein anderes Format von Textdateien. Die gebräuchlichsten Formate sind das Unix- und das Windows-Format. Ein Hauptunterschied besteht darin, dass ein anderes Zeichen oder eine Folge von Zeichen verwendet wird, um ein Ende einer Zeile anzuzeigen. Auf Unix, ist es LF - Zeichen ( \n, 0Aoder 10 dezimal). Unter Windows ist dies eine Folge von zwei Zeichen, CR und LF ( \r+ \n, 0D+ 0Aoder 13 + 10 in Dezimalzahl).

Während viele Anwendungen und Systeme heutzutage mit beiden Formaten arbeiten können, benötigen manche ein bestimmtes Format. Wenn Sie eine Datei in einem anderen Format präsentieren, wird sie nicht korrekt angezeigt, wie oben beschrieben.

Text / ASCII-Übertragungsmodus

Aus diesem Grund unterstützen Dateiübertragungsclients und -server den Text- / ASCII- Übertragungsmodus . Beim Übertragen einer Datei in diesem Modus wird die Datei (idealerweise) von einem nativen Format in ein Quellsystem in ein natives Format eines Zielsystems konvertiert. Wenn Sie beispielsweise eine Textdatei im Textmodus von Windows in ein Unix-System hochladen, werden die Dateizeilenenden von CR + LF in LF konvertiert.

WinSCP verwendet standardmäßig den binären Übertragungsmodus für alle Dateien. Erfahren Sie, wie Sie es für die Verwendung des Text- / ASCII-Übertragungsmodus konfigurieren können . Sie müssen möglicherweise auch das korrekte serverseitige Textdateiformat konfigurieren .

Wenn Sie WinSCP jedoch zwingen möchten, den Binärmodus zu verwenden, müssen Sie, selbst wenn Sie Dateien in einem Texteditor bearbeiten, einen externen Texteditor verwenden (der interne Editor von WinSCP unterstützt das Unix-Dateiformat nicht) und muss WinSCP so konfigurieren, dass es nicht erzwingt Textmodus für bearbeitete Dateien . Stellen Sie außerdem sicher, dass Ihr externer Texteditor die Datei in dem Format speichert, das Sie benötigen (die meisten Texteditoren unterstützen heutzutage andere Textdateiformate und nicht nur ein Format, das der Plattform, auf der der Editor ausgeführt wird, entspricht).

Bekannte Probleme mit dem Übertragungsmodus

  • Pure-FTPd-FTP-Server: Beim Herunterladen einer Datei mit Windows-Zeilenenden (CR + LF) in einem Text- / ASCII-Modus ersetzt der Server LF durch CR + LF, was zu einem falschen CR + CR + LF führt. Wenn Sie diese Datei in einem internen Editor von WinSCP öffnen, interpretiert der Editor die Sequenz als zwei Zeilenenden (CR und CR + LF), sodass nach jeder Inhaltszeile eine leere Zeile angezeigt wird. Wenn die Datei gespeichert wird, speichert der interne Editor zwei Windows-Zeilenenden CR + LF und CR + LF. Beim Hochladen werden sie in zwei LF konvertiert. Sie können dieses Problem umgehen, indem Sie einen externen Editor verwenden und sicherstellen, dass WinSCP keinen Textmodus für bearbeitete Dateien erzwingt .

Debuggen der Textdatei-Konvertierung

Wenn das Aktivieren (oder Deaktivieren) des Text- / ASCII-Übertragungsmodus das Problem nicht beheben kann und die übertragene / bearbeitete Datei vom Zielsystem immer noch falsch erkannt wird, müssen Sie herausfinden, in welchem ​​Schritt die Datei falsch konvertiert wurde (oder nicht) wurde konvertiert).

Verwenden Sie zum Erkennen der von einer Datei verwendeten Zeilenenden unter Windows den folgenden Befehl in der PowerShell-Konsole, um den Hex-Dump der ersten 100 Zeichen der angegebenen Datei anzuzeigen ( example.txt):

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

Für eine Datei mit folgendem Inhalt in einem Windows-Format

One Two 

es zeigt an:

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

Beachten Sie die zwei Sequenzen 0d 0a(CR + LF), die das Windows-Format anzeigen.

Verwenden Sie den Befehl, um Zeilenenden zu ermitteln, die von einer Datei auf einem Unix / Linux-System verwendet werden:

xxd example.txt | head 

(Alternativen sind hexdump example.txt | headoder od example.txt | head.)

Für dieselbe Datei wie oben wird nur im Unix-Format Folgendes angezeigt:

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

Beachten Sie das Zeichen 0a(LF), das das Unix-Format angibt.

Wenn Sie keinen Shell-Zugriff auf das Remote-System haben, laden Sie die Datei mit der Binärkodierung herunter und verwenden Sie den PowerShell-Befehl für eine lokale binäridentische Kopie.

Verwenden Sie diese Techniken, um festzustellen, welches Format sowohl Quell- als auch Zieldateien haben. Erkennen Sie beim Bearbeiten einer Datei auch das Format einer lokalen temporären Kopie der bearbeiteten Datei, wie vom Editor gespeichert. Siehe Voreinstellungen für einen Ort der temporären Kopien .

Support anfordern

Wenn Sie mit dem oben genannten Problem das Problem nicht verstehen und weitere Unterstützung in Anspruch nehmen möchten, schließen Sie alle Ihre Ergebnisse ein, einschließlich der Kopien der Quell- und Zieldatei. Fügen Sie beim Bearbeiten einer Datei auch eine lokale temporäre Kopie bei, die vom Editor gespeichert wurde. Komprimieren Sie die Dateien im Idealfall (ZIP), um zu verhindern, dass Ihr Browser das Dateiformat ändert, wenn Sie die Dateien zur Unterstützung der Anfrage anhängen.


(Ich bin der Autor von WinSCP)

0
T.Todua

=== Meine einzigen LÖSUNGEN ===

Methode 1:

- Öffnen Sie die Datei (zB Notepad ++), öffnen Sie das Fenster "Suchen und Ersetzen" [Strg + F] (aktivieren Sie unter "Suchmodus" die Option "Erweitert"), geben Sie \ r \ n in die erste Zeile und \ n in die Datei ein Klicken Sie anschließend auf "Alle ersetzen" und " Speichern".

Methode2:

-in " Voreinstellungen> Transer> Standard " wählen Sie " Automatisch (Übertragungsmodus) ";
-Dann im " Text " -Fenster solche Bedingungen einstellen (aber ich habe sie nicht gut getestet):

Nun kann Ihr Problem behoben sein. Viele Leute haben dieses Problem, da neue Zeilen standardmäßig (in einigen Fällen) von WINSCP entfernt werden.

0
knalle

Keine doppelten Linebreaks mehr. Meine Lösung bestand darin, die Option "Textübertragungsmodus für Dateien im externen Editor erzwingen" in den Editor-Einstellungen zu deaktivieren.