Dlaczego w Unicode jest tyle spacji i podziałów wierszy?

19

Unicode ma może 50 spacji

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

i 6 podziałów linii

nie tylko CRLF, LF, CR, ale także NEL (U + 0085), PS (U + 2029) i LS (U + 2028).

Może rozumiem większość spacji i PS („separator akapitu”), ale do czego służą „Next Line” i „Separator linii”?

Wszystko wygląda na wymyślone przez bardzo dużą komisję, w której wszyscy chcieli mieć własne miejsce, a liderom przyznano jeden podział linii. Ale tak na poważnie, jak sobie z tym radzisz, gdy Twój język programowania go nie obsługuje (lub robi to źle, jak np. Java)?

maaartinus
źródło
1
Jak Java robi to „źle”?
Billy ONeal 30.01.11
Prawie całkowicie, s. stackoverflow.com/questions/4304928/...
maaartinus
2
@maaartinus: (Nie mogę uwierzyć, że bronię Javy wszystkich rzeczy) Klasy postaci Javy są udokumentowane, że mają zastosowanie do określonego zestawu znaków. Unicode dostarcza więcej znaków, które wyglądają, jakby pasowały do ​​tych klas znaków, ale Unicode nie definiuje języków wyrażeń regularnych; tylko kodowanie znaków. Java zachowuje się całkowicie poprawnie zgodnie ze specyfikacją - to znaczy, aby dopasować typowe białe znaki. Jeśli chcesz, aby pasowało do wszystkiego w standardzie Unicode, które może być postrzegane jako puste miejsce, musisz to napisać sam.
Billy ONeal 30.01.11
2
Dziękuję za informację. Jednak mogą swobodnie tworzyć Pattern.compile2010metodę zwracającą wyrażenia regularne działające zgodnie z definicją z ubiegłych lat. Mogą też swobodnie tworzyć metodę, Pattern.compileLatestUTSktóra wyraźnie stwierdza, że ​​znaczenie zmieniłoby się zgodnie z nową specyfikacją.
maaartinus
2
Wygląda Java ostatecznie zrobił fix / modernizacji ich wdrożenia regex, używając flagi opt-in, aby zapobiec problemy z kompatybilnością wstecz: stackoverflow.com/a/4307261/1172352
peterflynn

Odpowiedzi:

15

Może rozumiem większość spacji i PS („separator akapitu”), ale do czego służą „Next Line” i „Separator linii”

NASTĘPNA LINIA (U + 0085) jest często używana jako znak nowej linii w systemach EBCDIC (jako 0x15). To jest jak CR + LF, ale jako jedna postać.

LINE SEPARATOR (U + 2028) i PARAGRAPH SEPARATOR (U + 2029) zostały wyjaśnione w rozdziale 5.8 standardu Unicode , który opisuje je jako wersję tekstową HTML <br>i <p>, aby ujednoznacznić te funkcje „nowej linii”. Ale w praktyce postacie te nie są przyzwyczajone.

dan04
źródło
1
Dobre wytłumaczenie, jednak dla mnie to znaczy: jeden koniec linii za lidera komitetu.
maaartinus
5
@maaartinus Nope. Jedna linia przerwa na wszystkich poprzednich sprzecznych norm, i 2 więcej jednoznaczne z nich od standardu Unicode.
Milind R
9
xkcd.com/927
dan04