Mengapa ada begitu banyak spasi dan garis terputus di Unicode?

19

Unicode mungkin memiliki 50 ruang

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

dan 6 jeda baris

tidak hanya CRLF, LF, CR, tetapi juga NEL (U + 0085), PS (U + 2029) dan LS (U + 2028).

Mungkin saya bisa memahami sebagian besar ruang dan PS ("Pemisah paragraf"), tetapi apa gunanya "Baris Berikutnya" dan "Pemisah baris"?

Itu semua tampak seperti diciptakan oleh komite yang sangat besar di mana semua orang menginginkan ruang mereka sendiri dan para pemimpin diberikan satu jeda baris masing-masing. Tapi serius, bagaimana Anda menghadapinya ketika bahasa pemrograman Anda tidak mendukungnya (atau apakah itu salah seperti Java)?

maaartinus
sumber
1
Bagaimana Java melakukannya "salah"?
Billy ONeal
Hampir sepenuhnya, s. stackoverflow.com/questions/4304928/…
maaartinus
2
@maaartinus: (Saya tidak percaya saya membela Java dari semua hal) Kelas karakter Java didokumentasikan untuk diterapkan pada serangkaian karakter tertentu. Unicode memasok lebih banyak karakter yang sepertinya sesuai dengan kelas-kelas karakter ini, tetapi Unicode tidak mendefinisikan bahasa ekspresi reguler; hanya pengkodean karakter. Java berperilaku benar sesuai dengan spesifikasi itu - yaitu untuk mencocokkan spasi putih yang khas. Jika Anda ingin mencocokkan semua dalam standar Unicode yang mungkin dilihat sebagai ruang kosong maka Anda harus menulis sendiri.
Billy ONeal
2
Terima kasih untuk informasinya. Namun, tetapi mereka bebas untuk membuat Pattern.compile2010metode pengembalian regex yang bekerja sesuai dengan definisi tahun lalu. Mereka juga bebas membuat metode Pattern.compileLatestUTSyang secara eksplisit menyatakan, bahwa artinya akan berubah sesuai dengan spesifikasi baru.
maaartinus
2
Terlihat seperti Java akhirnya melakukan perbaikan / memodernisasi implementasi regex, menggunakan opt-in bendera untuk mencegah mundur masalah kompatibilitas: stackoverflow.com/a/4307261/1172352
peterflynn

Jawaban:

15

Mungkin saya bisa memahami sebagian besar ruang dan PS ("pemisah paragraf"), tetapi apa yang "Next Line" dan "Line separator" baik untuk

NEXT LINE (U + 0085) sering digunakan sebagai karakter baris baru pada sistem EBCDIC (seperti 0x15). Ini seperti CR + LF, tetapi sebagai satu karakter.

LINE SEPARATOR (U + 2028) dan PARAGRAPH SEPARATOR (U + 2029) dijelaskan di bagian 5.8 dari standar Unicode , yang menggambarkannya sebagai versi teks-biasa dari HTML <br>dan <p>, untuk menyatukan fungsi "baris baru" ini. Namun dalam praktiknya, karakter ini tidak banyak digunakan.

dan04
sumber
1
Penjelasan yang baik, namun bagi saya itu berarti: satu baris istirahat per pemimpin komite.
maaartinus
5
@maaartinus Tidak. Satu baris memecah per semua standar yang bertentangan sebelumnya, dan 2 lagi yang tidak ambigu dari standar Unicode.
Milind R
9
xkcd.com/927
dan04