เหตุใดจึงมีช่องว่างและตัวแบ่งบรรทัดจำนวนมากใน Unicode


19

Unicode อาจมีช่องว่าง 50 ช่อง

\ u0009 \ u000A- \ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000] [\ u0009 \ u000A- \ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u180E \ u2000- \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000

และตัวแบ่งบรรทัดที่ 6

ไม่เพียง CRLF, LF, CR แต่ยัง NEL (U + 0085), PS (U + 2029) และ LS (U + 2028)

บางทีฉันอาจจะเข้าใจช่องว่างส่วนใหญ่และ PS ("ตัวคั่นย่อหน้า") แต่ "บรรทัดถัดไป" และ "ตัวคั่นบรรทัด" เหมาะสำหรับอะไร

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


1
Java ทำ "ผิด" อย่างไร?
Billy ONeal

เกือบสมบูรณ์แล้ว stackoverflow.com/questions/4304928/…
maaartinus

2
@maaartinus: (ฉันไม่อยากจะเชื่อเลยว่าฉันจะปกป้อง Java ของทุกสิ่ง) คลาสอักขระของ Java ถูกบันทึกไว้เพื่อนำไปใช้กับชุดอักขระเฉพาะ Unicode มีอักขระมากขึ้นซึ่งดูเหมือนว่าจะพอดีกับคลาสของอักขระเหล่านี้ แต่ Unicode ไม่ได้กำหนดภาษาที่แสดงผลปกติ การเข้ารหัสอักขระเท่านั้น Java ทำงานอย่างถูกต้องสมบูรณ์ตามสเป็ค - นั่นคือเพื่อให้ตรงกับช่องว่างทั่วไป หากคุณต้องการให้ตรงกับทุกอย่างในมาตรฐาน Unicode ที่อาจถูกมองว่าเป็นพื้นที่ว่างเปล่าคุณจะต้องเขียนด้วยตัวคุณเอง
Billy ONeal

2
ขอบคุณสำหรับข้อมูล อย่างไรก็ตามพวกเขามีอิสระที่จะสร้างPattern.compile2010วิธีการคืนค่า regexes ที่ทำงานตามคำจำกัดความของปีที่แล้ว พวกเขายังมีอิสระที่จะสร้างวิธีการPattern.compileLatestUTSที่จะระบุอย่างชัดเจนว่าความหมายจะเปลี่ยนไปตามข้อกำหนดใหม่
maaartinus

2
ดูเหมือนว่าในที่สุด Java ก็ทำการแก้ไข / ทำให้การใช้งาน regex ของพวกเขาทันสมัยขึ้นโดยใช้การเลือกใช้สถานะเพื่อป้องกันปัญหาความเข้ากันได้ย้อนหลัง: stackoverflow.com/a/4307261/1172352
peterflynn

คำตอบ:


15

บางทีฉันอาจจะเข้าใจช่องว่างส่วนใหญ่และ PS ("ตัวคั่นย่อหน้า") แต่ "บรรทัดถัดไป" และ "ตัวคั่นบรรทัด" คืออะไรดีสำหรับ

NEXT LINE (U + 0085) มักใช้เป็นอักขระขึ้นบรรทัดใหม่ในระบบ EBCDIC (เช่น 0x15) มันเหมือนกับ CR + LF แต่เป็นตัวละครเดียว

LINE SEPARATOR (U + 2028) และ PARAGRAPH SEPARATOR (U + 2029) ได้อธิบายไว้ในหัวข้อที่ 5.8 ของมาตรฐาน Unicodeซึ่งอธิบายว่าเป็น HTML ที่เป็นข้อความธรรมดา<br>และ<p>เพื่อยกเลิกฟังก์ชั่นเหล่านี้ของ "newline" แต่ในทางปฏิบัติตัวละครเหล่านี้ไม่ค่อยได้ใช้มากนัก


1
คำอธิบายที่ดี แต่สำหรับฉันมันหมายถึง: การแบ่งหนึ่งบรรทัดต่อผู้นำคณะกรรมการ
maaartinus

5
@maaartinus Nope หนึ่งบรรทัดแบ่งตามมาตรฐานที่ขัดแย้งกันทั้งหมดก่อนหน้านี้และอีกสองบรรทัดที่ไม่คลุมเครือจากมาตรฐาน Unicode
Milind R

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