Versi redsed dari WinSCP FAQ Mengapa baris file teks salah setelah file ditransfer atau diedit?
Lihat khususnya bagian Masalah yang Diketahui .
Setelah mentransfer atau mengedit file, mungkin saja terjadi jeda baris yang salah, yang mungkin bermanifestasi sebagai:
- Jeda baris hilang. Sepertinya jika seluruh isi file berada pada satu baris.
- Jeda baris digandakan. Sepertinya ada garis kosong tambahan di antara setiap baris.
- Ada simbol / karakter aneh di akhir setiap baris.
Format File Teks
Platform yang berbeda (sistem operasi) menggunakan format file teks yang berbeda. Format yang paling umum adalah format Unix dan Windows. Perbedaan utama adalah bahwa karakter atau urutan karakter yang berbeda digunakan untuk menandakan akhir suatu garis. Pada Unix, ini karakter LF ( \n
, 0A
atau 10 dalam desimal). Pada Windows, ini adalah urutan dua karakter, CR dan LF ( \r
+ \n
, 0D
+ 0A
atau 13 + 10 dalam desimal).
Sementara banyak aplikasi dan sistem saat ini dapat bekerja dengan kedua format, beberapa memerlukan format tertentu. Saat menyajikan file dalam format lain, mereka gagal menampilkannya dengan benar, seperti dijelaskan di atas.
Mode Transfer Teks / ASCII
Untuk alasan ini, klien dan server transfer file mendukung mode transfer teks / ASCII . Saat mentransfer file dalam mode ini, file akan (idealnya) dikonversi dari format asli ke sistem sumber, ke format asli ke sistem target. Misalnya, ketika mengunggah file teks menggunakan mode teks dari sistem Windows ke Unix, ujung-ujung file bisa dikonversi dari CR + LF ke LF.
WinSCP secara default menggunakan mode transfer biner untuk semua file. Pelajari cara mengonfigurasinya untuk menggunakan mode transfer teks / ASCII . Anda mungkin juga perlu mengkonfigurasi format file teks sisi server yang benar .
Sebaliknya, ketika Anda ingin memaksa WinSCP untuk menggunakan mode biner, bahkan ketika mengedit file dalam editor teks, Anda harus menggunakan editor teks eksternal (editor internal WinSCP tidak mendukung format file Unix) dan mengkonfigurasi WinSCP untuk tidak memaksa mode teks untuk file yang diedit . Pastikan juga editor teks eksternal Anda menyimpan file dalam format yang Anda butuhkan (Sebagian besar editor teks saat ini mendukung format file teks yang berbeda, bukan hanya format asli ke platform yang dijalankan oleh editor).
Masalah yang Diketahui dengan Mode Transfer
- Server FTP Pure-FTPd: Saat mengunduh file dengan Windows line-endings (CR + LF) dalam mode teks / ASCII, server mengganti LF dengan CR + LF, menghasilkan CR + CR + LF yang salah. Saat membuka file seperti itu di editor Internal WinSCP, editor menafsirkan urutan sebagai dua ujung baris (CR dan CR + LF) menghasilkan baris kosong setelah setiap baris konten. Ketika file disimpan, editor internal menyimpan dua ujung jalur Windows CR + LF dan CR + LF. Saat diunggah, mereka dapat dikonversi menjadi dua LF. Solusinya adalah menggunakan editor eksternal dan pastikan WinSCP tidak memaksa mode teks untuk file yang diedit .
Debugging Konversi File Teks
Jika mengaktifkan (atau menonaktifkan) mode transfer teks / ASCII tidak membantu masalah dan file yang Anda transfer / edit masih dianggap salah oleh sistem target, Anda perlu mengetahui pada langkah apa file dikonversi secara tidak benar (atau belum dikonversi).
Untuk mendeteksi ujung baris yang digunakan oleh file di Windows, gunakan perintah berikut pada konsol PowerShell untuk menampilkan hex dump dari 100 karakter pertama file yang diberikan ( example.txt
):
Get-Content -Encoding Byte -TotalCount 100 example.txt |% {Write-Host ("{0:x2} " -f $_) -NoNewline}; Write-Host
Untuk file dengan konten berikut dalam format Windows
One
Two
ini menampilkan:
4f 6e 65 0d 0a 54 77 6f 0d 0a
Perhatikan dua urutan 0d 0a
(CR + LF) yang menunjukkan format Windows.
Untuk mendeteksi akhir baris yang digunakan oleh file di sistem Unix / Linux gunakan perintah:
xxd example.txt | head
(Alternatifnya adalah hexdump example.txt | head
atau od example.txt | head
.)
Untuk file yang sama seperti di atas, hanya dalam format Unix, ini menampilkan:
0000000: 4f6e 650a 5477 6f0a One.Two.
Perhatikan karakter 0a
(LF) yang menunjukkan format Unix.
Jika Anda tidak memiliki akses shell ke sistem jarak jauh, unduh file menggunakan pengkodean biner dan gunakan perintah PowerShell pada salinan identik biner lokal.
Gunakan teknik ini untuk mendeteksi, format apa yang dimiliki file sumber dan tujuan. Saat mengedit file, deteksi juga format salinan sementara lokal dari file yang diedit sebagaimana disimpan oleh editor. Lihat preferensi untuk lokasi salinan sementara .
Meminta Dukungan
Ketika hal di atas tidak membantu Anda memahami masalah dan Anda memutuskan untuk mencari dukungan lebih lanjut, sertakan semua temuan Anda, termasuk salinan file sumber dan tujuan. Saat mengedit file, sertakan juga salinan sementara lokal yang disimpan oleh editor. Kompres secara ideal (ZIP) file untuk menghindari browser Anda mengubah format file, ketika melampirkan file untuk mendukung permintaan.
(Saya penulis WinSCP)