ไทย

เครื่องมือข้อความและชีวิตประจำวัน · ชุดเครื่องมือข้อความ

CR, LF และ CRLF: การลงท้ายบรรทัดมาจากไหน และเหตุใดข้อความที่วางจึงแตก

· พื้นหลัง

การสิ้นสุดบรรทัด การล้างข้อความ ข้อมูลการส่งออก

อักขระควบคุมการขึ้นบรรทัดใหม่และการป้อนบรรทัดเพื่อรวมและแยกแถวของข้อความ
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

อธิบายต้นกำเนิดของเทเลไทป์ของการขึ้นบรรทัดใหม่และการป้อนบรรทัด เหตุใดระบบปฏิบัติการจึงเลือกรูปแบบที่แตกต่างกัน และวิธีที่ตัวเลือกเหล่านั้นแสดงเป็นบรรทัดว่างสองเท่าและอักขระจรจัดในข้อความที่วาง

การส่งออกโดยมีบรรทัดว่างหลังทุกแถว - เพราะเหตุใดไฟล์จากระบบอื่นจึงวางด้วยบรรทัดมากกว่าสองเท่า

คุณวางการส่งออกแบบสามแถว และดูบรรทัดว่างหลังทุกระเบียน เป็นเรื่องยากที่จะตำหนิ Windows CRLF ทันที แต่โดยปกติแล้วพื้นที่ข้อความที่เป็นไปตามมาตรฐานจะแสดงการขึ้นบรรทัดใหม่ในรูปแบบที่ทำให้เป็นมาตรฐาน แถวคู่บ่อยกว่าหมายความว่าการแปลงก่อนหน้านี้ถือว่าการขึ้นบรรทัดใหม่และการป้อนบรรทัดเป็นตัวคั่นอิสระสองตัว หรือแทรกบรรทัดใหม่เพิ่มเติมระหว่างบันทึก

เก็บต้นฉบับไว้จนกว่าคุณจะรู้ว่าขั้นตอนใดเปลี่ยนแปลงไป เปรียบเทียบแหล่งที่มาในตัวแก้ไขที่สามารถเปิดเผยอักขระควบคุม จากนั้นเปรียบเทียบจำนวนบรรทัดที่วาง ToolAcre จงใจยอมรับ CRLF, LF และ lone CR เป็นขอบเขตเดียวในแต่ละไฟล์ ดังนั้นไฟล์บันทึกสามรายการที่ไม่ถูกแตะต้องควรสร้างบรรทัดสามบรรทัดแทนที่จะเป็นหกบรรทัดเพียงเพราะว่ามาจาก Windows

แถวว่างเพิ่มเติมเป็นอาการ ไม่ใช่ข้อพิสูจน์ว่า CRLF เพียงอย่างเดียวเป็นสาเหตุ

ชื่อนี้อธิบายการดำเนินการทางกายภาพบนเทอร์มินัลการพิมพ์ การเลื่อนแคร่จะเลื่อนแคร่ไปที่จุดเริ่มต้นของบรรทัดปัจจุบัน ในขณะที่การป้อนบรรทัดจะเลื่อนกระดาษไปยังบรรทัดถัดไป พวกมันถูกควบคุมแยกกันเพราะสามารถร้องขอการเคลื่อนไหวอย่างใดอย่างหนึ่งได้อย่างอิสระ ASCII เก็บไว้เป็นอักขระควบคุม CR ที่ทศนิยม 13 และ LF ที่ทศนิยม 10

หน้าจอสมัยใหม่ไม่สามารถเคลื่อนย้ายกระดาษได้อีกต่อไป แต่ค่าไบต์ยังคงอยู่ในไฟล์ โปรโตคอล และอินเทอร์เฟซการเขียนโปรแกรม ประวัติจะอธิบายว่าทำไม CR และ LF จึงไม่สามารถใช้เครื่องหมายวรรคตอนแทนกันได้ และเหตุใด CRLF จึงเป็นลำดับอักขระสองตัว ไม่ได้หมายความว่าแอปพลิเคชันสมัยใหม่ทุกตัวจะประมวลผลแยกกัน parsers โดยทั่วไปจะจดจำคู่นี้ว่าเป็นหนึ่งบรรทัดที่ลงท้ายด้วยตรรกะ

แบบแผนสามแบบ — LF บน Unix และ macOS สมัยใหม่, CRLF บน Windows, CR บน Mac OS แบบคลาสสิก และเหตุใดแต่ละแบบจึงดูสมเหตุสมผล

ระบบที่มีลักษณะคล้าย Unix และ Unix โดยทั่วไปจะใช้ LF สำหรับการลงท้ายบรรทัด และ macOS สมัยใหม่ก็เป็นไปตามแบบแผนดังกล่าว ไฟล์ข้อความ Windows ตามอัตภาพใช้ CRLF Classic Mac OS ใช้ CR เพียงอย่างเดียว แต่ Mac OS X นำ Unix Foundation และ LF มาใช้ ตัวเลือกเหล่านั้นยังคงปรากฏให้เห็นเมื่อเครื่องมือแลกเปลี่ยนข้อความธรรมดาโดยไม่เห็นด้วยกับการทำให้เป็นมาตรฐาน

ไม่มีแบบแผนใดที่ทำให้คำนั้นแตกต่างออกไป ปัญหาปรากฏขึ้นที่ขอบเขตซึ่งผู้อ่านคาดหวังว่าจะมีเพียงหนึ่งตัวแทนหรือแยกตัวละครควบคุมทุกตัวอย่างไร้เดียงสา ตัวแยกวิเคราะห์บรรทัดที่มีประสิทธิภาพจะตรวจสอบ CRLF เป็นคู่ก่อนที่จะตรวจสอบ CR หรือ LF เดี่ยว ToolAcre ทำสิ่งนั้นทุกประการด้วยรูปแบบที่สั่ง ` | | ` จากนั้นรวมเอาต์พุตที่แปลงแล้วกับ LF

จะเกิดอะไรขึ้นในกล่องข้อความของเบราว์เซอร์ - โดยทั่วไปแล้วตัวแบ่งบรรทัดจะถูกทำให้เป็นมาตรฐานอย่างไรเมื่อวางและตำแหน่งที่อักขระจรจัดยังคงปรากฏอยู่

HTML กำหนดการจัดการพิเศษสำหรับตัวแบ่งบรรทัดในการควบคุมข้อความ ในค่าพื้นที่ข้อความ เบราว์เซอร์จะปรับ CRLF ให้เป็นมาตรฐาน และแยก CR เป็น LF ในค่าที่เปิดเผย ในขณะที่การส่งแบบฟอร์มสามารถใช้กฎข้อมูลแบบฟอร์มสำหรับการขึ้นบรรทัดใหม่ ด้วยเหตุนี้ การวางที่ดูถูกต้องในกล่องยังสามารถทำให้เป็นอนุกรมที่แตกต่างกันไปตามเลเยอร์อื่น หรือคัดลอกไปยังซอฟต์แวร์ด้วยรูปแบบอื่น

Stray CR ยังคงสามารถแสดงได้เมื่อข้อความข้ามพื้นที่ข้อความปกติ เมื่อไบต์ที่ใช้ Escape เช่น อักขระตัวอักษร `\r` ปรากฏขึ้น หรือเมื่อ parser แยกเฉพาะ LF และปล่อยให้ CR ติดอยู่กับแต่ละฟิลด์ เบราว์เซอร์เป็นขั้นตอนหนึ่งในเส้นทาง ไม่ใช่บริการซ่อมแซมแบบสากลสำหรับไฟล์ ผู้ผลิตคลิปบอร์ด API และผู้ใช้บรรทัดคำสั่ง

เบราว์เซอร์จะแบ่งบรรทัดพื้นที่ข้อความให้เป็นปกติ แต่รูปแบบคลิปบอร์ดและดาวน์สตรีมยังคงแตกต่างกัน

แถวว่างและการขึ้นบรรทัดใหม่ต้องได้รับการวินิจฉัยที่แตกต่างกัน ลบบรรทัดว่างจะลบแถวที่มีเนื้อหาว่างเปล่าหรือช่องว่างหลังจากที่ ToolAcre จดจำรูปแบบการลงท้ายบรรทัดทั้งสามแบบแล้ว Trim Lines จะลบช่องว่างที่นำหน้าและต่อท้ายออกจากทุกแถว เนื่องจากตัวแยกของ ToolAcre ใช้ตัวแยก CR จริง โดยปกติแล้วการตัดแต่งจึงไม่จำเป็นเพียงเพื่อลบตัวแยกนั้นเท่านั้น

ใช้การตัดเฉพาะเมื่อมีช่องว่าง แท็บ หรืออักขระที่ไม่ได้ใช้งานตามตัวอักษร และตรวจสอบการเยื้องที่มีความหมายก่อนทำการเปลี่ยนแปลง หากข้อความมี `^M` ที่มองเห็นได้ ให้ตรวจสอบว่าผู้ดูกำลังแสดงผล CR จริงหรืออักขระสองตัวที่พิมพ์ได้ การเปลี่ยนแบบครอบคลุมสามารถสร้างความเสียหายให้กับเนื้อหาที่ต้องการได้ ในขณะที่การตรวจสอบจำนวนก่อนและหลังจะให้ผลลัพธ์ที่ตรวจสอบได้

ลบบรรทัดว่างเพื่อแก้ไขแถวว่าง โดยปกติแล้วการตัดแต่งจะไม่จำเป็นหลังจาก ToolAcre แยก CR อย่างถูกต้อง

สำหรับตัวอย่างที่ทำซ้ำได้ ให้เริ่มต้นด้วยชื่อสามชื่อที่การแสดงระดับกลางที่เสียหายมีแถวว่างระหว่างแต่ละชื่อ: `Ada`, ว่าง, `Grace`, ว่าง, `Linus` ตัวนับคำและอักขระรายงานห้าบรรทัด นี่เป็นอินพุตสองเท่าโดยเจตนา ลำดับ CRLF ของแท้เพียงอย่างเดียวจะได้รับการยอมรับว่าเป็นขอบเขตเดียวและจะไม่สร้างแถวว่างเหล่านั้นใน ToolAcre

เลือก Remove Empty Lines และเอาต์พุตจะกลายเป็นสามบรรทัดที่เชื่อมต่อกับ LF ตอนนี้เคาน์เตอร์ควรรายงานสามรายการ หากค่าที่นำเข้ามีช่องว่างภายในด้วย ให้เรียกใช้ Trim Lines แยกกัน และตรวจสอบผลลัพธ์ การแยกการดำเนินการเหล่านั้นเป็นการพิสูจน์ว่าข้อบกพร่องใดที่ได้รับการแก้ไขแล้ว แทนที่จะถือว่าการล้างข้อมูลทุกครั้งเป็นการแปลงที่คลุมเครือจากข้อความ Windows

ตัวอย่างการทำงาน: ทำความสะอาดการส่งออกสองเท่าโดยเจตนาและตรวจสอบจำนวนบรรทัด

การล้างข้อมูลการสิ้นสุดบรรทัดไม่ได้ซ่อมแซมการตัดคำแบบแข็ง โดยที่ประโยคตรรกะหนึ่งประโยคถูกทำลายโดยเจตนาที่ความกว้างของคอลัมน์ การลบทุกบรรทัดใหม่ออกจากเนื้อหานั้นจะรวมย่อหน้าจริงและรายการข้อมูลด้วย ตัดสินใจว่าขอบเขตแสดงถึงบันทึก ย่อหน้า หรือการตัดภาพก่อนที่จะใช้การดำเนินการบรรทัดทั่วทั้งบล็อก

นอกจากนี้ยังไม่วินิจฉัยการเข้ารหัสอักขระด้วย เครื่องหมายลำดับไบต์ UTF-8 ไดมอนด์ทดแทน mojibake และการถอดรหัสล้มเหลวเกี่ยวข้องกับวิธีที่ไบต์กลายเป็นอักขระ ไม่ใช่ว่า CR หรือ LF จะแยกอักขระเหล่านั้นออกเป็นแถวหรือไม่ เก็บรักษาไฟล์ต้นฉบับและระบุการเข้ารหัสด้วยเครื่องมือรับรู้ไฟล์ที่เหมาะสม ก่อนที่จะถือว่าสัญลักษณ์ที่มองเห็นได้แปลก ๆ เป็นจุดสิ้นสุดของบรรทัด

การสิ้นสุดบรรทัดคือประวัติศาสตร์ที่คุณเห็นได้ เครื่องมือบรรทัดและตัวนับของ Text Toolkit ช่วยให้คุณแก้ไขอาการได้ภายในไม่กี่วินาที

CR, LF และ CRLF คือการควบคุมในอดีตที่มีผลกระทบต่อความเข้ากันได้ในปัจจุบัน แบบจำลองทางจิตที่ปลอดภัยที่สุดคือขอบเขตเส้นตรรกะเส้นเดียวที่มีการเป็นตัวแทนทางกายภาพหลายแบบ นับบันทึก ตรวจสอบรูปแบบแหล่งที่มา และระบุขั้นตอนที่แนะนำแถวว่างหรืออักขระควบคุมที่คงไว้ก่อนที่จะลบสิ่งใดๆ

สำหรับเนื้อหาที่วาง ให้เปิดชุดเครื่องมือข้อความที่ `/tools/text/` สังเกตจำนวนบรรทัดเริ่มต้น ใช้ Remove Empty Lines เฉพาะเมื่อแถวว่างไม่เป็นที่ต้องการอย่างแท้จริง และใช้ Trim Lines สำหรับช่องว่างโดยรอบเท่านั้น ตรวจสอบการนับและบันทึกตัวอย่างอีกครั้งในภายหลัง การตรวจสอบสั้นๆ ดังกล่าวจะเปลี่ยนปัญหาการจัดรูปแบบที่มองไม่เห็นให้กลายเป็นการแปลงข้อความที่ควบคุมและพลิกกลับได้