Pregunta

¿Estoy en lo cierto al suponer que la única diferencia entre "archivos de Windows" y "archivos Unix" es el salto de línea?

Tenemos un sistema que se ha movido de una máquina con Windows a una máquina Unix y estamos teniendo problemas con el formato.

Necesito automatizar la traducción entre Unix/Windows antes de que los archivos lleguen al sistema en nuestro "sistema de transporte".Probablemente necesitaré algo para determinar el formato actual y algo para transformarlo al otro formato.Si es solo la nueva línea la que marca la gran diferencia, entonces estoy considerando simplemente leer los archivos con java.io.Hasta donde yo sé, pueden manejar ambos con readLine.Y luego simplemente escribe cada línea con

while (line = readline)
    print(line + NewlineInOtherFormat)
....

Resumen:

samjudson:

Esta es solo una diferencia en los archivos de texto, donde UNIX usa un solo avance de línea (LF) para indicar una nueva línea, Windows usa un retorno de carro/avance de línea (CRLF) y Mac usa solo un CR.

a la que Cebjyre elabora:

OS X usa LF, lo mismo que UNIX; aunque MacOS 9 y versiones anteriores usaban CR

Mes

También podría haber una diferencia en la codificación de caracteres para los caracteres nacionales.No existe una "codificación Unix", pero muchas variantes de Linux utilizan UTF-8 como codificación predeterminada.Mac OS (que también es Unix) utiliza su propia codificación (macroman).No estoy seguro de cuál es la codificación predeterminada de Windows.

McDowell

Además de las diferencias de nueva línea, la marca de orden de bytes puede causar problemas si los archivos se tratan como Unicode en Windows.

descaradosoft

Sin embargo, otro conjunto de problemas con los que puede encontrarse puede estar relacionado con codificaciones de caracteres de uno o varios bytes.Si ve caracteres extraños e inesperados (no al final de la línea), esta podría ser la razón.Especialmente si ve cuadros cuadrados, signos de interrogación, signos de interrogación al revés, caracteres adicionales o caracteres acentuados inesperados.

sadie

En Unix, los archivos que comienzan con .están escondidos.En Windows, es un indicador del sistema de archivos al que probablemente no tenga fácil acceso.Esto puede provocar que archivos que se supone que están ocultos ahora se vuelvan visibles en las máquinas cliente.

Los permisos de archivos varían entre los dos.Probablemente encontrará, cuando copie archivos en un sistema Unix, que los archivos ahora pertenecen al usuario que realizó la copia y tienen derechos limitados.Necesitará usar chown/chmod para asegurarse de que los usuarios correctos tengan acceso a ellos.

Existen herramientas para ayudar con el problema:

pauloo

Si solo está interesado en el contenido de los archivos de texto, entonces sí, los finales de línea son diferentes.Eche un vistazo a algo como dos2unix, puede ser de ayuda aquí.

descaradosoft

Como sugiere pauldoo, herramientas como dos2unix pueden resultar muy útiles.Tenga en cuenta que estos pueden estar en su sistema Linux/Unix como fromdos o tofrodos, o tal vez incluso como recodificación de la caja de herramientas de propósito general.

Ayuda para la codificación java

descaradosoft

Al escribir en archivos o leer archivos (que usted tiene control), a menudo vale la pena especificar la codificación a utilizar, ya que la mayoría de los métodos Java lo permiten.Sin embargo, garantizar también que la configuración regional del sistema coincida puede evitar muchos dolores de cabeza.

¿Fue útil?

Solución

Esta es solo una diferencia en los archivos de texto, donde UNIX usa un solo avance de línea (LF) para indicar una nueva línea, Windows usa un retorno de carro/avance de línea (CRLF) y Mac usa solo un CR.

Archivos binarios no debería haber diferencia (es decir,un JPEG en una máquina con Windows será byte por byte igual que el mismo JPEG en una caja Unix).

Otros consejos

También podría haber una diferencia en la codificación de caracteres para los caracteres nacionales.No existe una "codificación Unix", pero muchas variantes de Linux utilizan UTF-8 como codificación predeterminada.Mac OS (que también es Unix) utiliza su propia codificación (macroman).No estoy seguro de cuál es la codificación predeterminada de Windows.

Pero esto podría ser otra fuente de problemas (aparte de los diferentes saltos de línea).

¿Cuales son tus problemas?Los problemas relacionados con los saltos de línea se pueden corregir fácilmente con los programas dos2unix o unix2dos en la máquina Unix.

Si solo está interesado en el contenido de los archivos de texto, entonces sí, los finales de línea son diferentes.Echa un vistazo a algo como dos2unix, puede ser de ayuda aquí.

(Por supuesto, hay muchas otras cosas que hacen que los archivos Unix y Windows sean diferentes, pero no creo que estés interesado en esas otras diferencias en este momento).

Además de las respuestas dadas, es posible que encuentre problemas con los diferentes sistemas de archivos:

  • En Unix, los archivos que comienzan con a . están escondidos.En Windows, es un indicador del sistema de archivos al que probablemente no tenga fácil acceso.Esto puede provocar que archivos que se supone que están ocultos ahora se vuelvan visibles en las máquinas cliente.

  • Los permisos de archivos varían entre los dos.Probablemente encontrará, cuando copie archivos en un sistema Unix, que los archivos ahora pertenecen al usuario que realizó la copia y tienen derechos limitados.Necesitarás usar chown/chmod para asegurarse de que los usuarios correctos tengan acceso a ellos.

Además de las diferencias de nueva línea, el marca de orden de bytes puede causar problemas si los archivos se tratan como Unicode en Windows.

Como sugiere pauldoo, herramientas como dos2unix pueden resultar muy útiles.Tenga en cuenta que estos pueden estar en su sistema Linux/Unix como desde dos o tofrodos, o tal vez incluso como la caja de herramientas de propósito general recodificar.

Sin embargo, otro conjunto de problemas con los que puede encontrarse puede estar relacionado con codificaciones de caracteres de uno o varios bytes.Si ve caracteres extraños e inesperados (no al final de la línea), esta podría ser la razón.Especialmente si ve cuadros cuadrados, signos de interrogación, signos de interrogación al revés, caracteres adicionales o caracteres acentuados inesperados.

Ejecutando el comando lugar en su caja *nix le dirá cuál es la configuración regional del sistema.Si esta es diferente a la codificación utilizada en los archivos de texto que se han transferido desde la máquina con Windows, a veces esto puede causar problemas, dependiendo del uso de esos archivos.Puedes usar el muy poderoso. recodificar comando para intentar convertir entre los diferentes conjuntos de caracteres, así como cualquier problema de final de línea. recodificar -l le mostrará todos los formatos y codificaciones entre los que la herramienta puede convertir.Es probable que sea una lista MUY larga.

Al escribir en archivos o leer archivos (que usted tiene control), a menudo vale la pena especificar la codificación a utilizar, ya que la mayoría de los métodos Java lo permiten.Sin embargo, asegurarse también de que la configuración regional del sistema coincida puede ahorrarle muchas molestias.

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