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
, 0A
oder 10 dezimal). Unter Windows ist dies eine Folge von zwei Zeichen, CR und LF ( \r
+ \n
, 0D
+ 0A
oder 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 | head
oder 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)