Perché ci sono così tanti spazi e interruzioni di riga in Unicode?


19

Unicode ha forse 50 spazi

\ 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

e 6 interruzioni di riga

non solo CRLF, LF, CR, ma anche NEL (U + 0085), PS (U + 2029) e LS (U + 2028).

Forse potrei capire la maggior parte degli spazi e PS ("Separatore di paragrafo"), ma a cosa servono "Next Line" e "Line separator"?

Sembra tutto inventato da un comitato molto grande in cui tutti volevano il proprio spazio e ai leader veniva concessa una pausa di linea ciascuno. Ma seriamente, come lo gestisci quando il tuo linguaggio di programmazione non lo supporta (o fa male come ad esempio Java)?


1
In che modo Java lo fa "erroneamente"?
Billy ONeal,


2
@maaartinus: (Non riesco a credere di difendere Java di tutte le cose) Le classi di personaggi Java sono documentate per essere applicate a un set specifico di caratteri. Unicode fornisce più caratteri che sembrano adattarsi a queste classi di caratteri, ma Unicode non definisce i linguaggi delle espressioni regolari; solo codifiche di caratteri. Java si comporta in modo completamente corretto in base alle sue specifiche, ovvero allo spazio bianco tipico. Se vuoi che corrisponda a tutto nello standard Unicode che potrebbe essere visto come spazio vuoto, dovrai scriverlo tu stesso.
Billy ONeal,

2
Grazie per le informazioni. Tuttavia, sono liberi di creare un Pattern.compile2010metodo per restituire regex funzionanti secondo la definizione degli anni scorsi. Sono anche liberi di creare un metodo Pattern.compileLatestUTSche affermi esplicitamente che il significato cambierebbe in base alle nuove specifiche.
maaartinus,

2
Looks come Java finalmente fatto fix / ammodernare la loro attuazione regex, utilizzando un opt-in bandiera per evitare problemi di compatibilità a ritroso: stackoverflow.com/a/4307261/1172352
peterflynn

Risposte:


15

Forse potrei capire la maggior parte degli spazi e PS ("Separatore di paragrafo"), ma quali sono "Next Line" e "Line separator" buono per

LINEA SUCCESSIVA (U + 0085) viene spesso utilizzata come carattere di nuova riga su sistemi EBCDIC (come 0x15). È come CR + LF, ma come un personaggio.

LINE SEPARATOR (U + 2028) e PARAGRAPH SEPARATOR (U + 2029) sono spiegati nella sezione 5.8 dello standard Unicode , che li descrive come una versione in testo normale di HTML <br>e <p>, per chiarire queste funzioni di "newline". Ma in pratica, questi personaggi non si abituano molto.


1
Buona spiegazione, tuttavia per me significa: una interruzione di riga per capo comitato.
maaartinus,

5
@maaartinus Nope. Una interruzione di riga per tutti i precedenti standard in conflitto e altri 2 non ambigui rispetto allo standard Unicode.
Milind R

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.