ความแตกต่างระหว่าง“ \ n” และสภาพแวดล้อมนิวไลน์


คำตอบ:


203

ขึ้นอยู่กับแพลตฟอร์ม บน Windows เป็นจริง "\ r \ n"

จาก MSDN:

สตริงที่มี "\ r \ n" สำหรับแพลตฟอร์มที่ไม่ใช่ Unix หรือสตริงที่มี "\ n" สำหรับแพลตฟอร์ม Unix


5
แพลตฟอร์ม UNIX ใดที่. NET ที่ใช้กับ Microsoft ใส่ลงในเอกสาร (ฉันหมายถึงส่วนหนึ่งจากโมโน)
แจ็ค

10
@ Jack คุณสามารถเขียนไปยังไฟล์ที่จะเปิดในแพลตฟอร์ม Unix หรือส่งข้อความในแพ็คเกจที่แพลตฟอร์ม unix จะได้รับ และในอีกไม่กี่เดือน. net จะทำงานบนแพลตฟอร์ม Unix มันเริ่มขึ้นแล้ว
John Demetriou

ดังนั้นเพื่อความชัดเจน: บนแพลตฟอร์มที่ไม่ใช่ยูนิกซ์Environment.NewLineคือ\r\nแต่\nเรียกอีกอย่างว่า "บรรทัดใหม่" ทำไมพวกเขาถึงไม่โทรไปหาคนหลังด้วยชื่อที่รู้จักกันดีในชื่อ "ตัวดึงข้อมูลบรรทัด" และตัดความสับสนออกไป? พวกเขาสามารถใช้งานได้\lเช่นกัน
rory.ap

157

การนำไปปฏิบัติที่แน่นอนEnvironment.NewLineจากซอร์สโค้ด:

การใช้งานใน. NET 4.6.1:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the given
**        platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result<String>() != null);
        return "\r\n";
    }
}

แหล่ง


การใช้งานใน. NET Core:

/*===================================NewLine====================================
**Action: A property which returns the appropriate newline string for the
**        given platform.
**Returns: \r\n on Win32.
**Arguments: None.
**Exceptions: None.
==============================================================================*/
public static String NewLine {
    get {
        Contract.Ensures(Contract.Result() != null);
#if !PLATFORM_UNIX
        return "\r\n";
#else
        return "\n";
#endif // !PLATFORM_UNIX
    }
}

แหล่งที่มา (ในSystem.Private.CoreLib)

public static string NewLine => "\r\n";

แหล่งที่มา (ในSystem.Runtime.Extensions)


10
ใช่ :) ด้วยเหตุผลบางอย่างฉันคาดหวังว่าการใช้งาน. NET จะเป็นฟังก์ชั่นที่ซับซ้อนมาก
developerbmw

เมื่อพิจารณาถึงความเรียบง่ายของแหล่งข้อมูลในอินสแตนซ์นี้ก็น่าจะเป็นคำตอบ
Chris Walter

70

ดังที่คนอื่น ๆ พูดถึงEnvironment.NewLineส่งคืนสตริงเฉพาะแพลตฟอร์มสำหรับการเริ่มต้นบรรทัดใหม่ซึ่งควรเป็น:

  • "\r\n" (\ u000D \ u000A) สำหรับ Windows
  • "\n" (\ u000A) สำหรับ Unix
  • "\r" (\ u000D) สำหรับ Mac (หากมีการใช้งานอยู่)

โปรดทราบว่าเมื่อเขียนไปยังคอนโซล Environment.NewLine ไม่จำเป็นอย่างเคร่งครัด สตรีมคอนโซลจะแปล"\n"เป็นลำดับบรรทัดใหม่ที่เหมาะสมหากจำเป็น


มีการใช้งาน Mac อยู่ แค่โมโน วิ่งบนอะไรก็ได้
Dykam

24
แค่ทราบว่าจะเป็นแม็คเก่า ใหม่ (OSX) แม็คใช้\n
BlueRaja - Danny Pflughoeft

2
@Dykam ใช่ แต่มันทำงานช้าเหมือนจริงใน HP48gx ของฉัน
cod3monk3y

1
ตามที่คนอื่น ๆ ได้กล่าวถึงและตามที่ปรากฏใน. Net ที่แนบมากับคำถามนี้คำตอบนี้ไม่ถูกต้อง
Chris Walter

2
@Bilique เพียงบอกว่ามันอาจเป็นจริงในปี 2009 ไม่ใช่ว่ามันเป็น ฉันไม่ได้ตรวจสอบ
aloisdg ย้ายไป codidact.com

23

Environment.NewLine จะส่งคืนอักขระบรรทัดใหม่สำหรับแพลตฟอร์มที่สอดคล้องกันซึ่งรหัสของคุณกำลังทำงานอยู่

คุณจะพบว่ามีประโยชน์มากเมื่อคุณปรับใช้โค้ดของคุณใน linux บนกรอบงานโมโน


8

จากเอกสาร ...

สตริงที่มี "\ r \ n" สำหรับแพลตฟอร์มที่ไม่ใช่ Unix หรือสตริงที่มี "\ n" สำหรับแพลตฟอร์ม Unix


4

Environment.NewLine จะให้ "\ r \ n" เมื่อทำงานบน Windows หากคุณกำลังสร้างสตริงสำหรับสภาพแวดล้อมที่ใช้ Unix คุณไม่ต้องการ "\ r"


4

คุณอาจประสบปัญหาเมื่อพยายามแสดงข้อความหลายบรรทัดคั่นด้วย "\ r \ n"

เป็นวิธีปฏิบัติที่ดีเสมอในการทำสิ่งต่าง ๆ ในแบบมาตรฐานและใช้ Environment.NewLine

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