Pengingat - \ r \ n atau \ n \ r?


390

Aku tidak bisa mengingatnya. Jadi, apa cara yang tepat untuk mengakhiri jalur ASCII kuno dengan benar?


11
Jika Anda melakukan ini, pastikan Anda membuka file Anda dalam mode biner . Kalau tidak, stream file C / C ++ standar akan mengubah "\ n" (untuk file teks (default)) menjadi platform spesifik dari urutan baris (ELS). Dengan demikian "\ r \ n" di windows akan dikonversi menjadi "\ r \ r \ n" pada disk fisik. Catatan: jika Anda hanya menggunakan C / C ++ untuk membaca file kembali, Anda tidak akan melihat ELS dikonversi kembali ke "\ n" ketika membaca dari file.
Martin York

@ Martin - Saya di .net, dan saya menggunakan (untuk contoh ini) File.AppendAllText, dengan "\ r \ n", dan saya baru saja melihat ke dalam suatu file, dan tidak ada duplikasi di akhir garis. Sihir?
Daniel Mošmondor

@Aniel: Saya seharusnya lebih spesifik. The C / C ++ sungai. Ketika dikaitkan dengan file dan dibuka dalam mode teks . Itu juga tergantung pada bagaimana Anda melihat file (gunakan hexeditor).
Martin York

@ Martin - menggunakan PSPad dalam mode hex ...
Daniel Mošmondor

1
Pada keyboard kuno, tombol Enter disebut tombol Return. Jadi Pengembalian datang lebih dulu, maka Linefeed dihasilkan sebagai tanggapan. Ini sangat jelas ketika Anda memiliki terlalu banyak sejarah.
Mark Ransom

Jawaban:


1084

Saya akan menggunakan kata ' r etur n ' untuk mengingat, r muncul sebelum n.


116
Dan untuk mengingat bahwa kata yang digunakan adalah return , ingatlah bahwa carriage return . Jangan ingat bahwa "Kembali" adalah nama kunci pada keyboard Mac, atau Anda mungkin kemudian melihat keyboard PC, lihat kunci yang disebut "Enter," dan salah urutan huruf!
Rob Kennedy

3
@ David Tapi saya bertanya-tanya efek dari \n\rdan \r\nsama, bukankah mereka melakukan efek yang sama? dapatkah Anda membedakannya?
Mr.Anubis

7
@ Mr.Anubis jika Anda memiliki printer dot matrix tertentu , seharusnya tidak ada perbedaan, karena urutan perintah seharusnya tidak penting. Namun, pada beberapa printer, Anda akan mendapatkan garis kosong ekstra, atau tidak ada kemajuan garis sama sekali. Dan semua yang dikatakan di atas berlaku untuk editor teks - mereka akan bingung, kelas TextStream akan sakit, dan sebagainya. Agar IS penting. :)
Daniel Mošmondor

12
@ DanielMošmondor Atau, Anda bisa ingat bahwa pesanan tidak dapat dilakukan. Atau ketika Anda bertanya pada SO seseorang memberi Anda RemiNder, yang kemudian Anda lupa. Atau Anda tidak dapat menggunakan nama keluarga Anda sebagai pengingat, karena urutan r dan n di sana terbalik :)
Daniel Daranas

5
@RobKennedy haha ​​kau tahu aku datang ke sini dan membaca tentang kembali, dan berpikir "hebat!". Lalu saya membaca komentar Anda. Sekarang setiap kali saya tidak dapat mengingat kunci mana yang tidak boleh saya lihat - saya melihat kunci "Enter" saya dan saya pikir "ada sesuatu yang sangat salah di sini" ... haha ​​karena memikirkannya!
Wayne Uroda

53

Jika Anda menggunakan C # Anda harus menggunakan Environment.NewLine, yang sesuai dengan MSDN itu adalah:

String yang berisi "\ r \ n" untuk platform non-Unix, atau string yang berisi "\ n" untuk platform Unix.


46
Sebenarnya ini tergantung pada apa yang Anda lakukan. Jika Anda hanya mengeluarkan teks biasa ke konsol atau menjadi file untuk penggunaan lokal, Environment.NewLinetidak masalah. Namun, jika Anda menulis sesuatu dalam format yang terdefinisi dengan baik, format tersebut juga dapat menentukan baris baru. Sebagai contoh, protokol HTTP menyatakan Anda harus menggunakan \r\nsebagai terminator baris untuk header dll, terlepas dari platform.
Matti Virkkunen

3
Ya, ini saran yang sangat buruk.
IvanP

Inilah sebabnya mengapa Anda perlu melarikan diri pesan web Anda dan membuat tes unit untuk memverifikasi pengiriman \ r \ n (windows), \ r (mac), \ n (linux) mengirim dengan benar sebagai \ r \ n ke server web.
TamusJRoyce

37

Baris baru tergantung pada OS Anda:

DOS & Windows: \r\n 0D0A (hex), 13,10 (decimal)
Unix & Mac OS X: \n, 0A, 10
Macintosh (OS 9): \r, 0D, 13

Lebih detail di sini: https://ccrma.stanford.edu/~craig/utility/flip/

Jika ragu, gunakan hex viewer / editor freeware apa pun untuk melihat bagaimana suatu file mengkodekan baris baru.

Bagi saya, saya menggunakan panduan berikut untuk membantu saya mengingat: 0D0A = \ r \ n = CR, LF = ca rr iage r eturn, li n e feed


7
Anehnya, saya salah satu dari orang-orang yang hafal 0D0A, tetapi masih membingungkan \rdan \n.
Nyerguds

1
Atau, saya ingat carriage return dan \ n feed line ... hanya saja saya tidak ingat pesanan mereka, jadi tidak membantu dalam mengingat mana yang 0D dan mana yang 0A;)
Nyerguds

20

Urutannya adalah CR (Carriage Return) - LF (Line Feed). Ingat printer dot matrix? Persis. Jadi - urutan yang benar adalah \ r \ n


Saya pikir ini adalah jawaban yang paling logis
David Snabel-Caunt

12
LF + CR akan melakukan CR + LF yang sama pada printer.
ikegami

10
Saya tidak setuju, @David. Hanya memikirkan printer dot-matrix (atau mesin ketik, dalam hal ini, karena mereka orang-orang yang memiliki kereta untuk pulang) tidak cukup. Dengan hanya informasi dasar tentang cara kerjanya, tidak ada alasan untuk menganggapnya penting apakah kita memajukan kertas sebelum atau setelah kembali ke awal baris. Baik \ r \ n dan \ n \ r meletakkan kertas di posisi yang sama.
Rob Kennedy

@ikegami pada sebagian besar printer, bukan pada semuanya. Mereka juga memiliki DIP switch untuk mengkonfigurasi perilaku itu. :)
Daniel Mošmondor

5
Salah satu alasan untuk menempatkan umpan baris setelah carriage return adalah karena mengurangi jumlah total waktu yang diperlukan - saat head kembali ke tepi kiri kertas, pelat dapat mengindeks satu baris. Operasi yang lebih lama dimulai terlebih dahulu, sehingga seluruh operasi selesai dalam waktu yang dibutuhkan operasi yang lebih lama untuk dijalankan. Kami melakukan banyak hal untuk alasan seperti itu saat itu; bayangkan menunggu beberapa ratus baris pada 110 baud ...
Jerry Andrews

8

Dalam bahasa apa pun .NET, Environment.NewLinelebih disukai.


Tidak berfungsi untuk string konstan. Saat dibutuhkan, lebih baik tidak menggunakan konstan dan menggunakan string statis sebagai gantinya;)
TamusJRoyce

5

Berhati-hatilah dengan melakukan ini secara manual.
Sebenarnya saya akan menyarankan untuk tidak melakukan ini sama sekali.

Pada kenyataannya kita berbicara tentang urutan terminasi garis LTS yang khusus untuk platform.

Jika Anda membuka file dalam mode teks (mis. Bukan biner) maka stream akan mengubah "\ n" menjadi LTS yang benar untuk platform Anda. Kemudian, ubah LTS kembali ke "\ n" saat Anda membaca file.

Akibatnya jika Anda mencetak "\ r \ n" ke file windows Anda akan mendapatkan urutan "\ r \ r \ n" dalam file fisik (lihat dengan hex editor).

Tentu saja ini sangat menyebalkan saat mentransfer file antar platform.

Sekarang jika Anda menulis ke aliran jaringan maka saya akan melakukan ini secara manual (karena sebagian besar protokol jaringan menyebutnya secara khusus). Tapi saya akan memastikan aliran tidak melakukan interpretasi (jadi mode biner sesuai).


4

\r\n untuk Windows akan baik-baik saja.


Satu \njuga baik-baik saja di windows, termasuk Notepad versi terbaru.
André Caron

Saya pikir editor modern akan mendeteksi garis akhir, karena OS yang berbeda menggunakan ujung yang berbeda.
David Snabel-Caunt

1
Sebenarnya tidak: Jika Anda mencetak ini ke file (file std C / C ++ dibuka dalam mode teks) di windows file fisik akan berisi "\ r \ r \ n" (periksa dengan hex editor). Ketika Anda membacanya kembali "\ r \ n" dikonversi kembali menjadi satu "\ n".
Martin York

2
Sebenarnya, @vidaCaunt, saya baru saja mencoba \ n dan tidak berfungsi dengan notepad di Win8.
philk

4

Dari Wikipedia (Anda dapat membaca mana yang benar untuk OS Anda di artikel itu):

Sistem berdasarkan ASCII atau rangkaian karakter yang kompatibel menggunakan LF (Umpan baris, '\ n', 0x0A, 10 dalam desimal) atau CR (Pengembalian kereta, '\ r', 0x0D, 13 dalam desimal) secara individu, atau CR diikuti oleh LF (CR + LF, '\ r \ n', 0x0D0A).


3

\r\n

Aneh mengatakan saya mengingatnya karena itu adalah kebalikan dari mesin tik yang saya gunakan.
Nah jika itu normal saya tidak perlu mengingatnya ...:-)

mesin tik dari wikipedia * Gambar dari Wikipedia

Dalam mesin ketik saat Anda selesai untuk mendigit garis yang Anda gunakan tuas carriage return , yang sebelum membuat roll drum, baris baru , dan setelah memungkinkan Anda untuk mengoperasikan carriage return secara manual .

Anda dapat mendengarkan dari rekaman ini dari freesound.org suara dari kertas yang masuk di awal, dan sekitar -1: 03 detik dari akhir, setelah bel peringatan untuk akhir suara garis drum yang menggulung dan setelah salah satu carriage return.


2

jika Anda menggunakan C #, mengapa tidak menggunakan Environment.NewLine? (Saya berasumsi Anda menggunakan beberapa objek penulis file ... hanya lulus Environment.NewLinedan akan menangani terminator yang tepat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.