Bahasa Melayu

Teks & alat harian · Kit Alat Teks

CR, LF dan CRLF: dari mana pengakhiran baris berasal dan sebab teks yang ditampal terputus

· Latar belakang

penghujung baris pembersihan teks eksport data

Pemulangan pengangkutan dan aksara kawalan suapan baris bergabung dan memisahkan baris teks
Ilustrasi vektor ToolAcre asal

Menjelaskan asal-usul teletaip pemulangan pengangkutan dan suapan talian, sebab sistem pengendalian memilih konvensyen yang berbeza, dan cara pilihan tersebut dipaparkan sebagai baris kosong dua kali ganda dan aksara sesat dalam teks yang ditampal.

Eksport dengan baris kosong selepas setiap baris — mengapa fail daripada sistem lain menampal dengan baris dua kali lebih banyak

Anda menampal eksport tiga baris dan melihat baris kosong selepas setiap rekod. Adalah menarik untuk menyalahkan Windows CRLF dengan serta-merta, tetapi kawasan teks yang mematuhi piawaian biasanya memaparkan pemisah baris dalam bentuk yang dinormalkan. Baris yang digandakan lebih kerap bermakna bahawa penukaran yang lebih awal merawat pengembalian dan suapan talian sebagai dua pemisah bebas, atau memasukkan baris baharu tambahan antara rekod.

Simpan yang asal sehingga anda tahu peringkat mana yang mengubahnya. Bandingkan sumber dalam editor yang boleh mendedahkan aksara kawalan, kemudian bandingkan kiraan baris yang ditampal. ToolAcre dengan sengaja menerima CRLF, LF dan CR tunggal sebagai satu sempadan setiap satu, jadi fail tiga rekod yang tidak disentuh harus menghasilkan tiga baris dan bukannya enam semata-mata kerana ia berasal dari Windows.

Baris kosong tambahan ialah gejala, bukan bukti bahawa CRLF sahaja yang menyebabkannya

Nama tersebut menerangkan tindakan fizikal pada terminal percetakan. Pulangan gerabak mengalihkan gerabak ke permulaan baris semasa, manakala suapan baris memajukan kertas ke baris seterusnya. Mereka adalah kawalan berasingan kerana mana-mana usul boleh diminta secara bebas. ASCII mengekalkannya sebagai aksara kawalan CR pada perpuluhan 13 dan LF pada perpuluhan 10.

Skrin moden tidak lagi menggerakkan kertas, namun nilai bait kekal dalam fail, protokol dan antara muka pengaturcaraan. Sejarah menerangkan sebab CR dan LF bukan tanda baca yang boleh ditukar ganti dan sebab CRLF ialah jujukan dua aksara. Ini tidak bermakna setiap aplikasi moden memprosesnya secara berasingan; penghurai lazimnya mengiktiraf pasangan sebagai satu penghujung baris logik.

Tiga konvensyen — LF pada Unix dan macOS moden, CRLF pada Windows, CR pada Mac OS klasik dan sebab masing-masing kelihatan munasabah

Sistem seperti Unix dan Unix secara konvensional menggunakan LF untuk penghujung baris, dan macOS moden mengikut konvensyen tersebut. Fail teks Windows secara konvensional menggunakan CRLF. Mac OS klasik menggunakan CR sahaja, tetapi Mac OS X menggunakan asas Unix dan LF. Pilihan tersebut kekal kelihatan apabila alat bertukar teks biasa tanpa bersetuju dengan normalisasi.

Tiada konvensyen yang membuat perkataan itu sendiri berbeza. Masalah muncul di sempadan yang pembacanya menjangkakan sahaja satu perwakilan atau pemisahan secara naif pada setiap watak kawalan. Penghurai baris yang mantap menyemak CRLF sebagai pasangan sebelum menyemak CR atau LF tunggal. ToolAcre melakukan perkara yang sama dengan corak tersusun ` | | `, kemudian bergabung dengan output yang diubah dengan LF.

Perkara yang berlaku dalam kotak teks pelayar — cara pemisah baris biasanya dinormalisasi pada tampal dan tempat aksara sesat masih muncul

HTML mentakrifkan pengendalian khas untuk pemisah baris dalam kawalan teks. Dalam nilai kawasan teks, pelayar menormalkan CRLF dan CR tunggal kepada LF dalam nilai terdedah, manakala penyerahan borang boleh menggunakan peraturan data borang untuk pemisah baris. Akibatnya, tampalan yang kelihatan betul dalam kotak masih boleh disiri secara berbeza oleh lapisan lain atau disalin ke dalam perisian dengan konvensyen lain.

CR sesat masih boleh muncul apabila teks memintas kawasan teks biasa, apabila bait yang dilepaskan seperti aksara literal `\r` dipaparkan atau apabila penghurai berpecah sahaja pada LF dan meninggalkan CR dilampirkan pada setiap medan. Pelayar adalah satu peringkat dalam laluan, bukan perkhidmatan pembaikan universal untuk fail, pengeluar papan keratan, API dan pengguna baris arahan.

Pelayar menormalkan pemisah baris textarea, tetapi papan keratan dan format hiliran masih berbeza

Baris kosong dan pemulangan gerabak mengekor memerlukan diagnosis yang berbeza. Alih Keluar Baris Kosong memadamkan baris yang kandungannya kosong atau ruang kosong selepas ToolAcre telah mengenali ketiga-tiga gaya penamat baris. Trim Lines mengalih keluar ruang kosong di hadapan dan di belakang daripada setiap baris. Oleh kerana pembahagi ToolAcre menggunakan pemisah CR sebenar, pemangkasan biasanya tidak diperlukan semata-mata untuk memadamkan pemisah itu.

Gunakan pemangkasan sahaja apabila ruang, tab atau aksara literal yang tidak digunakan kekal dan periksa lekukan yang bermakna sebelum menukarnya. Jika teks mengandungi `^M` yang boleh dilihat, tentukan sama ada pemapar memaparkan CR sebenar atau dua aksara boleh cetak tersebut. Penggantian selimut boleh merosakkan kandungan yang dimaksudkan, manakala kiraan semakan sebelum dan selepas memberikan hasil yang boleh disemak.

Alih keluar baris kosong membetulkan baris kosong; pemangkasan biasanya tidak diperlukan selepas ToolAcre membelah CR dengan betul

Untuk contoh yang boleh diterbitkan semula, mulakan dengan tiga nama yang perwakilan perantaraan rosaknya mengandungi baris kosong antara setiap nama: `Ada`, kosong, `Grace`, kosong, `Linus`. Word dan Character Counter melaporkan lima baris. Ini adalah input yang sengaja digandakan; jujukan CRLF yang tulen sahaja akan diiktiraf sebagai satu sempadan dan tidak akan mencipta baris kosong tersebut dalam ToolAcre.

Pilih Alih Keluar Baris Kosong dan output menjadi tiga baris bercantum dengan LF. Kaunter kini harus melaporkan tiga. Jika nilai yang diimport turut membawa padding, jalankan Trim Lines secara berasingan dan semak hasilnya. Mengasingkan operasi tersebut membuktikan kecacatan mana yang diperbaiki setiap tindakan dan bukannya mengaitkan setiap pembersihan kepada penukaran yang tidak jelas daripada teks Windows.

Contoh yang berjaya: bersihkan eksport yang digandakan dengan sengaja dan sahkan kiraan baris

Pembersihan hujung baris tidak membaiki pembalut keras, di mana satu ayat logik sengaja dipecahkan pada lebar lajur. Mengalih keluar setiap baris baharu daripada bahan itu juga akan menyertai perenggan sebenar dan item senarai. Tentukan sama ada sempadan mewakili rekod, perenggan atau pembalut visual sebelum menggunakan operasi garisan merentasi keseluruhan blok.

Ia juga tidak mendiagnosis pengekodan aksara. Tanda pesanan UTF-8 bait, berlian gantian, mojibake dan kegagalan penyahkodan melibatkan cara bait menjadi aksara, bukan sama ada CR atau LF memisahkan aksara tersebut ke dalam baris. Kekalkan fail asal dan kenal pasti pengekodannya dengan alat mengetahui fail yang sesuai sebelum menganggap simbol ganjil yang boleh dilihat sebagai pengakhiran baris.

Bawa pulang - penghujung baris ialah sejarah yang boleh anda lihat; alat baris dan kaunter Text Toolkit membolehkan anda membetulkan gejala dalam beberapa saat

CR, LF dan CRLF ialah kawalan sejarah dengan akibat keserasian masa kini. Model mental paling selamat ialah satu sempadan garis logik dengan beberapa perwakilan fizikal. Kira rekod, periksa konvensyen sumber dan kenal pasti peringkat yang memperkenalkan baris kosong atau mengekalkan aksara kawalan sebelum memadamkan apa-apa.

Untuk bahan yang ditampal, buka Text Toolkit di `/tools/text/`, perhatikan kiraan baris awal, gunakan Alih Keluar Baris Kosong sahaja apabila baris kosong benar-benar tidak diingini dan gunakan Garis Pangkas sahaja untuk ruang kosong di sekeliling. Semak semula kiraan dan rekod sampel selepas itu. Audit yang singkat itu menukar masalah pemformatan yang tidak kelihatan kepada transformasi teks yang terkawal dan boleh diterbalikkan.