Warum gibt es in Unicode so viele Leerzeichen und Zeilenumbrüche?

19

Unicode hat vielleicht 50 Leerzeichen

\ u0009 \ u000A \ u000D \ u0020 \ u0085 \ u00A0 \ u1680 \ u180E \ u2000 \ u200A \ u2028 \ u2029 \ u202F \ u205F \ u3000] 180E 2000- 200A 2028 2029 F 205F 3000

und 6 Zeilenumbrüche

nicht nur CRLF, LF, CR, sondern auch NEL (U + 0085), PS (U + 2029) und LS (U + 2028).

Vielleicht könnte ich die meisten Leerzeichen und PS ("Paragraph Separator") verstehen, aber wozu sind "Next Line" und "Line Separator" gut?

Es sieht alles so aus, als ob es von einem sehr großen Komitee erfunden wurde, bei dem jeder seinen eigenen Raum haben wollte und den Leitern jeweils ein Zeilenumbruch gewährt wurde. Aber im Ernst, wie gehen Sie damit um, wenn Ihre Programmiersprache es nicht unterstützt (oder ist es falsch, wie z. B. Java)?

maaartinus
quelle
1
Wie macht Java das "falsch"?
Billy ONeal
Fast vollständig, s. stackoverflow.com/questions/4304928/…
Maaartinus
2
@maaartinus: (Ich kann nicht glauben, dass ich ausgerechnet Java verteidige) Javas Zeichenklassen sind dokumentiert und gelten für einen bestimmten Zeichensatz. Unicode bietet mehr Zeichen, die in diese Zeichenklassen passen. Unicode definiert jedoch keine regulären Ausdruckssprachen. nur Zeichenkodierungen. Java verhält sich gemäß seiner Spezifikation völlig korrekt - das entspricht dem typischen Leerzeichen. Wenn Sie möchten, dass es mit allem im Unicode-Standard übereinstimmt, was als leerer Platz angesehen werden kann, müssen Sie dies selbst schreiben.
Billy ONeal
2
Danke für die Info. Es steht ihnen jedoch frei, eine Pattern.compile2010Methode zu erstellen , die reguläre Ausdrücke gemäß der Definition des letzten Jahres zurückgibt. Sie können auch eine Methode erstellen, Pattern.compileLatestUTSdie explizit angibt, dass sich die Bedeutung gemäß der neuen Spezifikation ändern würde.
Maaartinus
2
Sieht aus wie Java schließlich tat fix / ihre regex Implementierung modernisieren, eine Opt-in - Flag mit rückwärts Kompatibilitätsprobleme zu vermeiden: stackoverflow.com/a/4307261/1172352
peterflynn

Antworten:

15

Vielleicht könnte ich die meisten Leerzeichen und PS ("Paragraph Separator") verstehen, aber wofür sind "Next Line" und "Line Separator" gut

NEXT LINE (U + 0085) wird auf EBCDIC-Systemen häufig als Newline-Zeichen verwendet (als 0x15). Es ist wie CR + LF, aber als ein Zeichen.

LINE SEPARATOR (U + 2028) und PARAGRAPH SEPARATOR (U + 2029) werden in Abschnitt 5.8 des Unicode-Standards erläutert , der sie als Nur -Text-Version von HTML beschreibt <br>und <p>diese Funktionen von "newline" disambiguiert. In der Praxis werden diese Charaktere jedoch nicht oft verwendet.

dan04
quelle
1
Gute Erklärung bedeutet für mich jedoch: ein Zeilenumbruch pro Ausschussvorsitzender.
Maaartinus
5
@ maaartinus Nein. Ein Zeilenumbruch pro alle vorherigen widersprüchlichen Standards und zwei weitere eindeutige aus dem Unicode-Standard.
Milind R
9
xkcd.com/927
dan04