Creo que \n
mueve la aguja hacia abajo y \r
mueve la aguja al comienzo de una línea (alinear a la izquierda). Sin embargo, no estoy seguro. Entonces, si me equivoco, corrígeme ...
De todos modos, me dijeron que Windows y Linux manejan newlines
y de manera carriage returns
diferente. Me gustaría saber cómo los manejan de manera diferente y algunos lugares donde es importante recordar. Gracias por responder.
linux
windows
newlines
carriage-return
千里 ち ゃ ん
fuente
fuente
\r\n
está bien en Windows pero\n\r
no lo está, y lo recuerdo porque\r\n
es un acrónimo de enfermera registrada. También escuché que eso\n
es lo que la gente usa en Linux y\r
no se usa solo para el mismo propósito que\r\n
.\r
se usa en MacOS realmente antiguos. Sin embargo, no he verificado estos hechos.\r
y\n
, dado que\n
su manejo depende de dónde lo esté usando. Mejor llamarlosCR
yLF
.Respuestas:
Esto es cierto, más o menos, pero sobre todo una curiosidad histórica. Originalmente, el avance de línea (LF) se usaba para avanzar el papel por una línea en impresoras y terminales de copia impresa ( teleimpresoras ); El retorno de carro (CR) devolvió el cabezal de impresión al inicio de la línea.
Esto probablemente todavía funciona en impresoras modernas cuando se usa en "modo de texto", pero hoy en día es de poca relevancia.
La diferencia es simple: los diseñadores de sistemas operativos tuvieron que elegir cómo representar el inicio de una nueva línea de texto en los archivos de la computadora. Por varias razones históricas, en el mundo Unix / Linux se eligió un único carácter LF como marcador de nueva línea; MS-DOS eligió CR + LF, y Windows heredó esto. Por lo tanto, diferentes plataformas utilizan diferentes convenciones.
En la práctica, esto se está convirtiendo en un problema cada vez menor. El marcador de nueva línea en realidad solo es relevante para los pogramas que procesan "texto sin formato", y no hay tantos, principalmente afecta el código fuente del programa, los archivos de configuración y algunos archivos de texto simples con documentación. Hoy en día, la mayoría de los programas que manejan este tipo de archivos (editores, compiladores, etc.) pueden manejar ambas convenciones de nueva línea, por lo que no importa cuál elija.
Hay algunos casos en los que las herramientas insisten en "su" convención de nueva línea (por ejemplo, los scripts de shell de Unix no deben usar CR + LF), en cuyo caso debe usar el correcto.
fuente
\n\r
y\n
son lo mismo? Por ejemplo, si estaba analizando un archivo de texto que fue editado en la PC de otra persona y contenía las versiones de salto de línea de Linux y Windows, ¿realizaría unpreg_match
for\n
y\n\r
me daría resultados diferentes?CR y LF
El Código Estándar Americano para el Intercambio de Información (ASCII) definió caracteres de control que incluyen CARRIAGE-RETURN (CR) y LINE-FEED (LF) que fueron (y aún son) utilizados para controlar la posición de impresión en impresoras de una manera análoga a máquinas de escribir mecánicas que precedieron a las primeras impresoras informáticas.
Dependencia de la plataforma
En Windows, el separador de línea tradicional en los archivos de texto es CR seguido de LF
En los sistemas Apple Macintosh antiguos (anteriores a OSX), el separador de línea tradicional en los archivos de texto era CR
En Unix y Linux, el separador de línea tradicional en los archivos de texto es LF.
\ n y \ r
En muchos lenguajes de programación y scripting
\n
significa "nueva línea". A veces (pero no siempre) esto significa el carácter ASCII LINE-FEED (LF), que, como usted dice, mueve el cursor (o la posición de impresión) una línea hacia abajo. En una impresora o máquina de escribir, esto realmente movería el papel una línea hacia arriba.Invariablemente
\r
significa el carácter ASCII CARRIAGE-RETURN (CR) cuyo nombre en realidad proviene de máquinas de escribir mecánicas donde había una tecla de retorno de carro que hacía que el rodillo ("carro") que llevaba el papel se moviera hacia la derecha, accionado por un resorte, tan lejos como fuera posible. Por lo tanto, establecer la posición de escritura actual en el margen izquierdo.Programación
En algunos lenguajes de programación
\n
puede significar una secuencia de caracteres dependiente de la plataforma que termina o separa líneas en un archivo de texto. Por ejemplo, en Perl,print "\n"
produce una secuencia de caracteres diferente en Linux que en Windows.En Java, la mejor práctica, si desea utilizar las terminaciones de línea nativas para la plataforma de tiempo de ejecución, es no utilizarlas
\n
o no utilizarlas\r
. Debe utilizarSystem.getProperty("line.separator")
. Debe usar\n
y\r
donde desee LF y CR independientemente de la plataforma (por ejemplo, como se usa en HTTP, FTP y otros protocolos de comunicaciones de Internet).Unix stty
En un shell de Unix, el
stty
comando puede usarse para hacer que el shell se traduzca entre estas diversas convenciones. Por ejemplostty -onlcr
, el shell traducirá posteriormente todos los LF salientes a CR LF.Linux y OSX siguen las convenciones de Unix
Archivos de texto
Los archivos de texto siguen siendo enormemente importantes y ampliamente utilizados. Por ejemplo, HTML y XML son ejemplos de archivos de texto. La mayoría de los protocolos importantes de Internet, como HTTP, siguen convenciones de archivos de texto e incluyen especificaciones para finales de línea.
Impresoras
La mayoría de las impresoras que no sean las más baratas, aún respetan CR y LF. De hecho, son fundamentales para los lenguajes de descripción de páginas más utilizados: PCL y Postscript.
fuente
line.separator
. Realmente depende de lo que quiera.println()
se usa automáticamenteline.separator
, por lo que si desea terminaciones de línea nativas, puede usarprintln()
(y si necesita un cierto tipo específico de terminación de línea, entonces no lo use, pero use "\ n" etc. explícitamente).\n
haya un carácter de control que no sea ASCII LF (que no sea un sistema basado en EBCDIC)? Me refiero a lo que\n
significa en una cadena o literal de caracteres, no al efecto de enviarlo a un archivo o dispositivo de salida.\n
siempre es el código 10 ASCII (y Unicode), porque el JLS lo dice explícitamente (JLS 3.10.6, "Secuencias de escape para literales de caracteres y cadenas" - Marqué :-)). Para otros idiomas, buena pregunta.En resumen, era necesario para las impresoras, pero ahora los sistemas operativos lo hacen de manera ligeramente diferente. En la mayoría de los casos, está bien simplemente hacer CR y LF haciendo
\r\n
y en la mayoría de los casos, esto funcionará bien.fuente
\r
o causa algún tipo de cambio de comportamiento?