Saya pikir \n
menggerakkan jarum ke bawah, dan \r
menggerakkan jarum ke awal garis (rata kiri)? Tapi saya tidak yakin. Jadi, jika saya salah mohon koreksi saya ....
Bagaimanapun, saya diberitahu bahwa Windows dan Linux menangani newlines
dan carriage returns
berbeda. Saya ingin tahu bagaimana mereka menanganinya secara berbeda dan beberapa tempat yang penting untuk diingat. Terimakasih telah menjawab.
linux
windows
newlines
carriage-return
千里 ち ゃ ん
sumber
sumber
\r\n
tidak apa-apa di Windows tetapi\n\r
tidak, dan saya ingat itu karena\r\n
akronim untuk perawat terdaftar. Saya juga mendengar bahwa\n
itulah yang digunakan orang di Linux dan\r
tidak digunakan sendiri untuk tujuan yang sama\r\n
.\r
digunakan dalam MacOS yang sangat tua. Saya belum memverifikasi fakta-fakta ini.\r
dan\n
, karena cara\n
penanganannya tergantung pada di mana Anda menggunakannya. Lebih baik memanggil merekaCR
danLF
.Jawaban:
Ini benar, kurang lebih, tetapi sebagian besar merupakan keingintahuan historis. Awalnya, linefeed (LF) digunakan untuk memajukan kertas dengan satu baris pada printer dan terminal hardcopy ( teleprinters ); carriage return (CR) mengembalikan print head ke awal baris.
Ini mungkin masih bekerja pada printer modern ketika digunakan dalam "mode teks", tetapi tidak ada relevansi saat ini.
Perbedaannya sederhana: perancang OS harus memilih cara untuk mewakili awal baris baru dalam teks dalam file komputer. Untuk berbagai alasan historis, di dunia Unix / Linux satu karakter LF dipilih sebagai penanda baris baru; MS-DOS memilih CR + LF, dan Windows mewarisi ini. Jadi platform yang berbeda menggunakan konvensi yang berbeda.
Dalam praktiknya, ini menjadi masalah yang semakin berkurang. Penanda baris baru benar-benar hanya relevan untuk pogram yang memproses "teks biasa", dan jumlahnya tidak banyak - sebagian besar hanya memengaruhi kode sumber program, file konfigurasi, dan beberapa file teks sederhana dengan dokumentasi. Saat ini sebagian besar program yang menangani jenis file ini (editor, kompiler dll) dapat menangani kedua konvensi baris baru, jadi tidak masalah yang mana yang Anda pilih.
Ada beberapa kasus di mana alat bersikeras pada konvensi baris baru "mereka" (mis. Skrip Unix shell tidak boleh menggunakan CR + LF), dalam hal ini Anda harus menggunakan yang benar.
sumber
\n\r
dan\n
sama? Sebagai contoh, jika saya mem-parsing file teks yang diedit pada PC orang lain dan berisi jeda baris versi Linux dan Windows, apakah akan melakukanpreg_match
for\n
dan\n\r
memberikan saya hasil yang berbeda?CR dan LF
American Standard Code for Information Interchange (ASCII) mendefinisikan karakter kontrol termasuk CARRIAGE-RETURN (CR) dan LINE-FEED (LF) yang dulu (dan masih) digunakan untuk mengontrol posisi cetak pada printer dengan cara yang dianalogikan dengan mesin tik mekanik yang mendahului printer komputer awal.
Ketergantungan platform
Di Windows, pemisah baris tradisional dalam file teks adalah CR diikuti oleh LF
Dalam sistem Apple Macintosh lama (pra OSX) pemisah garis tradisional dalam file teks adalah CR
Di Unix dan Linux, pemisah baris tradisional dalam file teks adalah LF.
\ n dan \ r
Dalam banyak bahasa pemrograman dan skrip
\n
berarti "baris baru". Terkadang (tetapi tidak selalu) ini berarti karakter ASCII LINE-FEED (LF), yang, seperti yang Anda katakan, menggerakkan kursor (atau posisi cetak) ke bawah satu baris. Dalam printer atau mesin tik, ini sebenarnya akan memindahkan kertas ke atas satu baris.Selalu
\r
berarti karakter ASCII CARRIAGE-RETURN (CR) yang namanya sebenarnya berasal dari mesin tik mekanik di mana ada kunci carriage-return yang menyebabkan roller ("carriage") yang membawa kertas bergerak ke kanan, ditenagai oleh pegas, sejauh itu akan pergi. Dengan demikian mengatur posisi pengetikan saat ini ke margin kiri.Pemrograman
Dalam beberapa bahasa pemrograman
\n
dapat berarti urutan karakter tergantung platform yang mengakhiri atau memisahkan baris dalam file teks. Misalnya di Perl,print "\n"
menghasilkan urutan karakter yang berbeda di Linux daripada di Windows.Di Jawa, praktik terbaik, jika Anda ingin menggunakan akhiran garis asli untuk platform runtime, tidak boleh digunakan
\n
atau tidak\r
sama sekali. Anda harus menggunakanSystem.getProperty("line.separator")
. Anda harus menggunakan\n
dan di\r
mana Anda ingin LF dan CR terlepas dari platform (mis. Seperti yang digunakan dalam HTTP, FTP dan protokol komunikasi Internet lainnya).Unix stty
Dalam shell Unix,
stty
perintah dapat digunakan untuk menyebabkan shell menerjemahkan antara berbagai konvensi ini. Misalnyastty -onlcr
akan menyebabkan shell menerjemahkan semua LF keluar ke CR LF.Linux dan OSX mengikuti konvensi Unix
File teks
File teks masih sangat penting dan banyak digunakan. Misalnya, HTML dan XML adalah contoh file teks. Sebagian besar protokol Internet penting, seperti HTTP, mengikuti konvensi file teks dan menyertakan spesifikasi untuk akhir baris.
Printer
Sebagian besar printer selain yang paling murah, masih menghormati CR dan LF. Bahkan mereka mendasar untuk bahasa deskripsi halaman yang paling banyak digunakan - PCL dan Postscript.
sumber
line.separator
. Itu benar-benar tergantung pada apa yang Anda inginkan.println()
secara otomatis digunakanline.separator
, jadi jika Anda ingin akhiran garis asli, Anda dapat menggunakanprintln()
(dan jika Anda memerlukan jenis akhir baris tertentu, maka jangan gunakan itu, tetapi gunakan "\ n" dll secara eksplisit).\n
karakter kontrol selain ASCII LF (selain sistem berbasis EBCDIC)? Saya mengacu pada apa\n
artinya dalam string atau karakter literal, bukan pada efek mengirimnya ke file atau perangkat output.\n
selalu ASCII (dan Unicode) kode 10, karena JLS mengatakannya secara eksplisit (JLS 3.10.6, "Escape Sequences for Character and String Literals" - Saya memeriksa :-)). Untuk bahasa lain - pertanyaan bagus.Singkatnya, diperlukan untuk printer, tetapi sekarang OS melakukannya sedikit berbeda. Dalam kebanyakan kasus, baik-baik saja melakukan CR dan LF dengan melakukan
\r\n
dan dalam kebanyakan kasus, ini akan berfungsi dengan baik.sumber
\r
atau apakah itu menyebabkan semacam perubahan perilaku?