`^ M` ที่ส่วนท้ายของไฟล์ข้อความแต่ละบรรทัดที่สร้างขึ้นภายใต้ Windows


10

ฉันสงสัยว่าทำไมถ้าคุณเปิดไฟล์ข้อความที่ทำใน Windows notepad ภายใต้ยูนิกซ์คุณจะพบว่ามันมี^Mตำแหน่งที่ควรมีบรรทัดใหม่หรือไม่

ความเข้าใจของฉันคือว่าใน Windows สายทุกคนจะจบลงด้วย\r\nเช่น 0x0D0Aใน ASCII ในขณะที่มีค่า^M ASCII 0x5E4Dฉันไม่สามารถเกี่ยวข้องทั้งสองนี้จากที่หนึ่งไปที่อื่น


ใน Windows คุณสามารถใช้โปรแกรมแก้ไขที่ดีกว่าเช่น Notepad ++ มันจะช่วยให้คุณสามารถบันทึกไฟล์ด้วยปลายสาย UNIX แต่ดูใน Windows ราวกับว่ามันมีปลายสาย Windows จากนั้นคุณสามารถดูได้ในทั้งสองระบบปฏิบัติการ
Kevin

ดูเพิ่มเติมการใช้ของ Jeff Atwood
nico

คำตอบ:


19

คุณพูดถูกเกี่ยวกับการจบบรรทัดนั้นสำคัญ ทั้งสองระบบคาดหวังว่าบรรทัดจะลงท้ายด้วย "\ n" แต่ Windows ยังเพิ่ม "\ r" ก่อนหน้านั้นที่ unix ไม่ได้คาดหวังดังนั้นโปรแกรม Unix จะส่งออก "\ r" ในแบบของพวกเขาเอง

ไฟล์ไม่ได้ลงท้ายด้วยอักขระสองตัว "^" และ "M" ซึ่งเป็นวิธีการทั่วไปในการแสดงอักขระที่ไม่สามารถพิมพ์ได้ โปรแกรมจะส่งออก "^" และตัวอักษรที่สอดคล้องกับค่าของไบต์เริ่มต้นด้วย A สำหรับ 1 M คือตัวอักษรที่ 13 และ '\ r' คือรหัส ASCII 13 (หรือ 0xD ตามที่คุณพูด) ดังนั้นคุณจะเห็น "^ เอ็ม"


2
นั่นคือมือสั้นสำหรับ Ctrl-M ซึ่งเป็นวิธีที่คุณได้รับตัวละครนั้นด้วยแป้นพิมพ์
สตีเวนพริทชาร์ด

7
คุณสามารถใช้อรรถประโยชน์บรรทัดคำสั่งdos2unixและunix2dosแปลงไฟล์ข้อความระหว่างรูปแบบ
Chris Nava

1
@ Chris True แต่ไม่มีอะไรเกี่ยวข้องกับคำถาม
Michael Mrozek

ขอบคุณ! (1) ฉันสงสัยว่าโปรแกรมใดที่จะพิมพ์อักขระที่ไม่สามารถพิมพ์ออกมาได้อย่างนั้น ตัวอย่างเช่นเครื่องมือแก้ไขข้อความ / ผู้ดูทั้งหมดทำงานอย่างนั้นหรือไม่? (2) ชนิดของอักขระที่ไม่สามารถพิมพ์ได้จะได้รับการปฏิบัติในลักษณะนั้นและชนิดใดที่ไม่ใช่ ยกตัวอย่างเช่นทำไมคุณไม่เอาท์พุทข้อความผู้ชม^Jสำหรับ \n?
ทิม

1
การแทนค่า ^ M ทำหน้าที่แก้ไขข้อความ GUI ตามปีที่ผ่านมาหากไม่ใช่เป็นทศวรรษ
Chris Nava
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.