Pregunta

¿Su software maneja caracteres de nueva línea de otros sistemas?

Linux/BSD    linefeed         ^J    10     x0A
Windows/IBM  return linefeed  ^M^J  13 10  x0D x0A
old Macs     return           ^M    13     x0D
others?

Por razones de locura, voy a usar la versión de Linux del carácter de nueva línea en mis archivos de texto. Pero, cuando llevo mis archivos de texto para decir Windows, algunos programas no funcionan bien con los caracteres de nueva línea en mi texto. ¿Cómo lidiarías con esto?

¿Fue útil?

Solución

Como dicen, sé estricto en lo que escribes y liberal en lo que lees.

Su aplicación debe poder funcionar correctamente leyendo ambos finales de línea. Si desea usar saltos de línea y potencialmente molestar a los usuarios de Windows, está bien.

Pero salvo para el Bloc de notas, la mayoría de los programas con los que juego parecen estar contentos con ambos métodos.

(Y uso Cygwin en Windows, lo que hace que todo sea interesante)

Otros consejos

La distribución estándar de Python viene con dos scripts de línea de comandos (en Herramientas / scripts) llamados crlf.py y lfcr.py que se pueden convertir entre los finales de línea de Windows y Unix / Linux.

[Fuente]

En .NET, las nuevas líneas se indican con Environment.NewLine , por lo que el marco está diseñado de tal manera que tome lo que sea la nueva línea del sistema (solo CR + LF o CR o LF sólo) para utilizar en tiempo de ejecución. Por supuesto, esto es finalmente útil en Mono.

Sospecho que encontrará que la mayoría de los programas modernos de Windows (con la notable excepción del Bloc de notas) manejan los archivos de sólo nueva línea muy bien. Sin embargo, los archivos generados con programas de Windows todavía tienden a tener terminaciones crlf.

La mayoría de las veces, las terminaciones de línea se manejarán automáticamente de una manera específica de la plataforma por la biblioteca de tiempo de ejecución. Por ejemplo, un programa en C que abre un archivo con fopen (..., " r ") verá las líneas de forma coherente (solo salto de línea) en cualquier plataforma, independientemente de las terminaciones de línea reales .

Hasta donde yo sé, solo el Bloc de notas tiene un problema con los separadores de línea. Prácticamente, cualquier otra pieza de software en el mundo acepta cualquiera de esos tres tipos de separadores, y posiblemente otros también. Desafortunadamente, el Bloc de notas es el editor de primer recurso para la mayoría de los usuarios de computadoras en estos días. Creo que es extremadamente irresponsable por parte de Microsoft dejar que esta situación continúe. Nunca he jugado con Vista, pero creo que el problema todavía existe allí, como en XP. ¿Alguien sabe sobre la próxima versión?

Como han dicho otros, hay muchos conversores (bastante triviales) alrededor, en caso de que surja la necesidad. Tenga en cuenta que si realiza la transferencia con FTP en modo Ascii, la conversión se realizará automáticamente ...

De hecho, el Bloc de notas es el programa más importante que tiene un problema con el final de LF ...

Lo más molesto que vi son los archivos de texto con final de línea mixto, realizados esencialmente por personas que editan un archivo de Windows en Unix, o utilidades que agregan cosas sin verificar el formato adecuado.

Para ser feliz, solo siga las recomendaciones del estándar.

http://unicode.org/standard/reports/tr13/tr13- 5.html

Y ofrece opciones para casos especiales como MacOS antiguo. O maneje el caso automáticamente si puede detectarlos de manera confiable.

Recomiendo formatear su texto en estilo Unix. Olvídate de los usuarios de Windows. Porque ningún usuario de Windows usa texto sin formato para documentos o datos. Se molestarán si pasa texto sin formato. Siempre esperan documentos de Word o Excel. Incluso si usan archivos de texto sin formato, el único problema que tendrán es simplemente mostrar texto de manera extraña.

Pero los usuarios de Unix experimentarán que todas sus herramientas funcionarán incorrectamente. Especialmente para Unix, siga estrictamente el estándar.

PS. Ah, si su usuario de Windows es un desarrollador, simplemente formatee con texto en Unix y dígales que ese es el archivo de Unix.

No estoy seguro de lo que quieres decir cuando dices 'trato', pero básicamente puedes decir algo como:

string convertLineBreaks(String line, String lineBreakYouWant) {
  replace all ^M^J or ^M or ^J in line with lineBreakYouWant

  return line
}

Editar: sospecho que después de volver a leer tu pregunta te refieres a cómo tratas los programas de otras personas que no pueden manejar los saltos de línea incorrectos (para el sistema de destino).

Sugeriría 1) utilizando un programa que pueda manejar o 2) ejecutar sus archivos a través de un script que encuentre saltos de línea de cualquier tipo y luego los convierta al tipo que sea adecuado para su sistema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top