CR LF, LF ve CR hat kesme tipleri arasındaki fark nedir?


758

CR LF (Windows), LF (Unix) ve CR (Macintosh) satır sonu türleri arasındaki farkı (mümkünse örneklerle) bilmek istiyorum.


9
Çok benzer, ancak tam bir kopya değil . \ngenellikle bir satır besleme ile temsil edilir, ancak mutlaka bir satır besleme değildir.
Adrian McCarthy

92
CR ve LF ASCII ve Unicode ise kontrol karakterleridir \rve \nbelirli programlama dillerinde kullanılan soyutlamalardır. Bu sorunun kapatılması, sorular arasındaki temel farklılıklar üzerine ışıldar ve yanlış bilgilendirmeyi sürdürür.
Adrian McCarthy

5
@AdrianMcCarthy Yakın oyların bir şekilde cevaplar gibi davranmasıyla ilgili bir sorun var; ikisinin aynı olduğunu iddia eden bir cevap indirilemez ve sonra çok, çok yanlış olarak gri olabilir, ancak oy çok yakın bir şekilde gerçekleşmesi için sadece 4 kabul oyu (upvotes ile karşılaştırılabilir) gerekir. oldu.
Jon Hanna

Sorunun bu formülasyonu kuşkusuz daha iyidir, ancak yine de tüm pratik amaçlar için aynı sorudur.
Jukka K. Korpela

6
@ JukkaK.Korpela: Hayır, gerçekten değil. \ntüm programlama dillerinde aynı anlama gelmez.
Adrian McCarthy

Yanıtlar:


348

Gerçekten sadece bir baytta hangi baytların depolandığı. CR, satır başı (daktilo günlerinden itibaren) ve LFbenzer şekilde satır beslemesi için bir bayt kodudur . Satır sonu işaretleri olarak yerleştirilmiş baytları ifade eder.

Her zaman olduğu gibi wikipedia hakkında daha fazla bilgi .


52
Bence bu CRkaçış karakteri \rve LFkaçış karakteri \n. Ayrıca Wikipedia: Newline .
Robert Vunabandi

1
Basit bir deyişle CR and LF, bu bağlantıya göre sadece satır sonu ve yeni satır , bu doğru mu?
Eylül'de shaijut

@shaijut CR, Satır Başı anlamına gelir. Daktilolarda arabayı geri döndüren şey buydu. Yani, çoğunlukla doğru.
AliFurkan

763

CR ve LF sırasıyla kodlanmış 0x0D(13 ondalık) ve 0x0A(10 ondalık) kontrol karakteridir .

Metin dosyasındaki satır sonunu işaretlemek için kullanılırlar. Belirttiğiniz gibi, Windows CR LF dizisini iki karakter kullanır; Unix sadece LF kullanır ve eski MacOS (OSX öncesi MacIntosh) CR kullanır.

Kıyamet tarihsel bir bakış açısı:

Peter tarafından belirtildiği gibi CR = Satır Başı ve LF = Satır Besleme , iki ifadenin kökleri eski daktilolarda / TTY'dir. LF kağıdı yukarı kaydırdı (ancak yatay konumu aynı tuttu) ve CR "taşıyıcının" geri getirilmesini sağladı, böylece yazılan bir sonraki karakter kağıt üzerinde en soldaki konumda olacaktı (ama aynı satırda). CR + LF her ikisini de yapıyor, yani yeni bir satır yazmaya hazırlanıyor. Zaman geçtikçe, kodların fiziksel semantiği geçerli değildi ve bellek ve disket alanı premium olduğundan, bazı işletim sistemi tasarımcıları sadece karakterlerden birini kullanmaya karar verdiler, birbirleriyle çok iyi iletişim kurmadılar; -)

Modern metin editörlerinin ve metin odaklı uygulamaların çoğu, dosyanın satır sonu kuralının otomatik olarak algılanmasını ve buna göre görüntülenmesini sağlayan seçenekler / ayarlar vb. Sunar.


11
aslında Windows bu karakterleri düzgün kullanan tek işletim sistemi, Satır Başı ve ardından Satır Beslemesi'dir.
Rolf

4
Peki, Windows üzerinde oluşturulan bir metin dosyasının üç işletim sisteminden en uyumlu olanı, yani her üç işletim sistemi alt kümesinde görüntülenme olasılığı en yüksek olduğunu söylemek doğru olur mu?
Prometheus

3
@Hashim düzgün görüntülenebilir, ancak satır başı ile bir metin kabuğu komut dosyası çalıştırmaya çalışmak genellikle bir hataya neden olur
Omer

Basit bir deyişle CR and LF, bu bağlantıya göre sadece satır sonu ve yeni satır , bu doğru mu?
Eylül'de shaijut

Bazı Windows tarzı dosyaların ( CR+LF) diğer sistemlerde çift satırlarla görüntülenebileceğini buldum . Muhtemelen metni görüntüleyen editör hem Satır Başı hem de Satır Beslemeyi yeni satır sınırlayıcıları olarak destekler ve bu nedenle 1'in amaçlandığı 2 satır oluşturabilir. Yani süre CR+LFolabilir en uyumlu, bunu sorun olmadan olduğunu sanmıyorum.
Magnus Bull

459

Bu bulduğum iyi bir özet:

Satır Başı (CR) karakteri ( 0x0D, \r) imleci bir sonraki satıra ilerlemeden satırın başına götürür. Bu karakter Commodore ve Erken Macintosh işletim sistemlerinde (OS-9 ve öncesi) yeni bir satır karakteri olarak kullanılır.

Satır Besleme (LF) karakteri ( 0x0A, \n) satırın başına dönmeden imleci bir sonraki satıra taşır. Bu karakter UNIX tabanlı sistemlerde (Linux, Mac OSX, vb.) Yeni bir satır karakteri olarak kullanılır

Satır Sonu (EOL) dizisi ( 0x0D 0x0A, \r\n) aslında iki ASCII karakteridir, CR ve LF karakterlerinin birleşimidir. İmleci hem bir sonraki satıra hem de o satırın başına taşır. Bu karakter, Microsoft Windows, Symbian OS ve diğerleri de dahil olmak üzere Unix olmayan diğer işletim sistemlerinin çoğunda yeni bir satır karakteri olarak kullanılır.

Kaynak


1
"Dikey sekme" karakteri imleci aşağı hareket ettirir ve LF karakterini değil, çizgideki konumu korur. LF EOL'dir.
12431234123412341234123

2
@TaylorLeese / r / n ve / n / r aynı mı?
Vicrobot

175

Sadece bunu belirten bir cevap olmadığından, kısa ve öz bir şekilde özetleyin:

Satır Başı (OSX öncesi MAC)

  • CR
  • \ r
  • ASCII kodu 13

Satır Besleme (Linux, MAC OSX)

  • LF
  • \ n
  • ASCII kodu 10

Satır Başı ve Satır Besleme (Windows)

  • CRLF
  • \ R \ n
  • ASCII kodu 13 ve sonra ASCII kodu 10

ASCII kodunu garip bir formatta görürseniz, bunlar sadece farklı bir sayı / tabandaki 13 ve 10 sayılarıdır, genellikle taban 8 (sekizli) veya taban 16 (onaltılık).

http://www.bluesock.org/~willg/dev/ascii.html


46

Jeff Atwood'un bu konuyla ilgili yeni bir blog yazısı var: The New Newline Schism

İşte Wikipedia'nın özü :

CR + LF dizisi, teletype makinelerini, tipik olarak bir ASR33'ü konsol aygıtı olarak benimsemiş birçok erken bilgisayar sisteminde yaygın olarak kullanılıyordu, çünkü bu dizi bu yazıcıları yeni bir hattın başlangıcına yerleştirmek için gerekliydi. Bu sistemlerde, metin genellikle rutin olarak bu yazıcılarla uyumlu olacak şekilde oluşturulmuştur, çünkü bu tür donanım detaylarını uygulamadan gizleyen aygıt sürücüleri kavramı henüz iyi gelişmemiştir; uygulamalar doğrudan teletype makinesiyle konuşmak ve kurallarını takip etmek zorunda kaldı.İki fonksiyonun ayrılması, baskı kafasının tek karakterli bir zamanda en sağdan bir sonraki satırın başlangıcına dönemediğini gizledi. Bu yüzden dizi her zaman önce CR ile gönderilmiştir. Aslında, yazdırma kafasına sol kenar boşluğuna hareket etmek için zaman vermek üzere genellikle ekstra karakterler (gereksiz CR'ler veya yok sayılan NUL'lar) göndermek gerekiyordu. Teletipler daha yüksek baud hızlarına sahip bilgisayar terminalleri ile değiştirildikten sonra bile, birçok işletim sistemi, ekranı kaydırmak için birden fazla karakter süresi gerektiren daha ucuz terminallerle uyumluluk için hala bu dolgu karakterlerinin otomatik gönderilmesini destekledi.


5
+1 Bu basit anlayışla kombinasyonun hangi sırada geldiğini her zaman hatırlıyorum. Bugün bile bu mekanik mantığı herhangi bir inktjet yazıcıda görebiliyoruz (öğrenmekten nefret ettiğim için anlamayı seviyorum). Diğer bellek püf noktalarım: "mac? Gönderene dönüş" ve "NewLineFeed" (CR === LF'yi hatırlamak ve CR'nin kısaltmasında zaten R olduğu için \ n'yi hatırlamak için)
GitaarLAB

3
"Şüpheliyim ... zamanlama için iki kontrol kodu gerekli". Söylediği gibi değil. Ekstra CR'lerin ve NUL'ların orijinal CR LF'ye değil, geri gelmesi için zaman vermek için burada olduklarını söylüyor.
Julien Rousseau

11
@Adrian Kişisel deneyim alacak mısınız? 1) Eski teletype günlerimde kullandığımız yazıcı gerekiyordu <CR><CR><LF>- bu yüzden elbette sadece bir tane denedim <CR>. Gönderdiğim <CR><LF>Auzun satırdan sonra ve olabilir duymakA Taşıyıcı tamamen iade önce yazdırılan.
John Burger

11
@Adrian 2) Unutmayın, bu her karakterin tam olarak bir işlev yaptığı elektro-mekanik çağdaydı. Bir kelimeyi sık sık satır yazdırarak, ardından <CR><CR>doğru sayıda boşluk gönderip yazarak, aynı kelimeyi yeniden yazdırarak: ilkel bir koyu harf biçimi.
John Burger

3
@Adrian 3) Ve son olarak, ASCII değil Baudot (veya Murray kodu) kullanıyordu. Bir başlangıç ​​biti ve bir buçuk durdurma biti arasında beş veri biti. Nasıl yarım parça alabilirsin? Bir sonraki karakteri göndermeye başlamadan önce yarım süre bekleyerek, yazdırma kafasına merkeze dönmesi için zaman verin.
John Burger

16

CR - ASCII kodu 13

LF - ASCII kodu 10.

Teorik olarak CR imleci ilk konuma (solda) döndürür. LF bir satır hareket eden imleci bir satır aşağı besler. Eski günlerde yazıcıları ve metin modu monitörlerini bu şekilde kontrol ettiniz. Bu karakterler genellikle metin dosyalarındaki satır sonlarını işaretlemek için kullanılır. Farklı işletim sistemleri farklı kurallar kullandı. Belirttiğiniz gibi, Windows CR / LF kombinasyonunu kullanırken OSX öncesi Mac'ler sadece CR vb.


7

ASCII veya uyumlu bir karakter kümesine dayanan sistemler, LF (Satır besleme, 0x0A, ondalık 10) veya CR (Satır başı, 0x0D, 13 ondalık) veya CR ve ardından LF (CR + LF, 0x0D 0x0A) kullanır; Bu karakterler yazıcı komutlarını temel alır: Satır besleme, bir satır kağıdın yazıcıdan beslenmesi gerektiğini ve satır başı, yazıcı satırının geçerli satırın başına dönmesi gerektiğini belirtir.

İşte detaylar .


5

"Kayıt ayırıcıları" veya "hat sonlandırıcıları" nın hüzünlü durumu, bilgi işlemin karanlık çağlarının mirasıdır.

Şimdi, temsil etmek istediğimiz her şeyin bir şekilde yapılandırılmış veri olduğunu ve satırları, dosyaları, protokolleri, mesajları, işaretlemeyi, her neyse tanımlayan çeşitli soyutlamalara uyduğunu kabul ediyoruz.

Ama bir zamanlar bu tam olarak doğru değildi. Yerleşik kontrol karakterleri ve cihaza özel işleme uygulamaları. Hem CR hem de LF gerektiren beyin ölü sistemleri, sadece kayıt ayırıcılar veya hat sonlandırıcılar için soyutlamaya sahip değildi. Teletip veya video ekranının birinci sütuna dönmesini sağlamak için CR gerekliydi ve bir sonraki satıra geçmek için LF (bugün, NL, aynı kod) gerekliydi. Ham verileri cihaza dökmekten başka bir şey yapma fikri çok karmaşıktı.

Unix ve Mac aslında satır sonu için bir soyutlama belirlediler , bunu hayal edin. Ne yazık ki, farklı olanlar belirttiler. (Unix, ahem, önce geldi.) Ve doğal olarak, SOP'ye zaten "yakın" bir kontrol kodu kullandılar

Bugün işletim yazılımımızın neredeyse tamamı Unix, Mac veya MS işletim SW'sinin bir torunu olduğundan, karışıklık sona eren çizgi ile sıkıştık.


1

Mantıksal olarak CRLF x'odoa ascii ile karşılaştırılacak olan EBCDIC NL = x'15 'türetilmiş NL ... veriler ana çerçevelerden orta aralıklara fiziksel olarak taşındığında bu belirgin hale gelir. Coloquially (sadece gizli kişiler ebcdic kullandığından) NL, CR veya LF veya CRLF ile eşitlenmiştir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.