¿Por qué hay tantos espacios y saltos de línea en Unicode?

19

Unicode tiene quizás 50 espacios

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

y 6 saltos de línea

no solo CRLF, LF, CR, sino también NEL (U + 0085), PS (U + 2029) y LS (U + 2028).

Tal vez podría entender la mayoría de los espacios y PS ("separador de párrafos"), pero ¿para qué sirven "Next Line" y "Line separator"?

Todo parece inventado por un comité muy grande donde todos querían su propio espacio y a los líderes se les concedió un salto de línea cada uno. Pero en serio, ¿cómo lo manejas cuando tu lenguaje de programación no lo admite (o lo hace mal, como Java)?

maaartinus
fuente
1
¿Cómo lo hace Java "incorrectamente"?
Billy ONeal
Casi por completo, s. stackoverflow.com/questions/4304928/…
maaartinus
2
@maaartinus: (No puedo creer que esté defendiendo a Java de todas las cosas) Las clases de caracteres de Java están documentadas para aplicarse a un conjunto específico de caracteres. Unicode proporciona más caracteres que parecen encajar en estas clases de caracteres, pero Unicode no define lenguajes de expresión regular; solo codificaciones de caracteres. Java se comporta completamente correctamente de acuerdo con sus especificaciones, es decir, para que coincida con los espacios en blanco típicos. Si desea que coincida con todo en el estándar Unicode que podría verse como un espacio vacío, deberá escribirlo usted mismo.
Billy ONeal
2
Gracias por la información. Sin embargo, pero son libres de crear un Pattern.compile2010método que devuelva expresiones regulares que funcionen según la definición de los últimos años. También son libres de crear un método Pattern.compileLatestUTSque establezca explícitamente que el significado cambiará de acuerdo con las nuevas especificaciones.
maaartinus
2
Miradas como Java finalmente hicieron fix / modernizar su aplicación expresiones regulares, utilizando un opt-en la bandera para evitar problemas de compatibilidad hacia atrás: stackoverflow.com/a/4307261/1172352
peterflynn

Respuestas:

15

Tal vez podría entender la mayoría de los espacios y PS ("separador de párrafo"), pero para qué sirven "Next Line" y "Line separator"

NEXT LINE (U + 0085) se usa a menudo como el carácter de nueva línea en los sistemas EBCDIC (como 0x15). Es como CR + LF, pero como un personaje.

SEPARADOR DE LÍNEA (U + 2028) y SEPARADOR DE PÁRRAFO (U + 2029) se explican en la sección 5.8 del estándar Unicode , que los describe como una versión de texto sin formato de HTML <br>y <p>, para desambiguar estas funciones de "nueva línea". Pero en la práctica, estos personajes no se acostumbran mucho.

dan04
fuente
1
Buena explicación, sin embargo para mí significa: un salto de línea por líder de comité.
maaartinus
55
@maaartinus Nope. Un salto de línea por todos los estándares conflictivos anteriores, y 2 más inequívocos del estándar Unicode.
Milind R
99
xkcd.com/927
dan04