Pergunta

Estou correto ao assumir que a única diferença entre "arquivos do Windows" e "arquivos unix" é a quebra de linha?

Temos um sistema que foi movido de uma máquina Windows para uma máquina Unix e está tendo problemas com o formato.

Preciso automatizar a tradução entre unix/windows antes que os arquivos sejam entregues ao sistema em nosso "sistema de transporte".Provavelmente precisarei de algo para determinar o formato atual e de algo para transformá-lo em outro formato.Se for apenas a nova linha, essa é a grande diferença, então estou pensando em apenas ler os arquivos com o java.io.Pelo que eu sei, eles são capazes de lidar com ambos com readLine.E então basta escrever cada linha de volta com

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

Resumo:

Samjudson:

Esta é apenas uma diferença em arquivos de texto, onde o UNIX usa um único Line Feed (LF) para indicar uma nova linha, o Windows usa um Carriage Return/Line Feed (CRLF) e o Mac usa apenas um CR.

ao qual Cebjyre elabora:

OS X usa LF, o mesmo que UNIX - MacOS 9 e anteriores usaram CR

Mo

Também pode haver uma diferença na codificação de caracteres nacionais.Não existe "codificação unix", mas muitas variantes do Linux usam UTF-8 como codificação padrão.O Mac OS (que também é unix) usa sua própria codificação (macroman).Não tenho certeza qual é a codificação padrão do Windows.

McDowell

Além das diferenças de nova linha, a marca de ordem de bytes pode causar problemas se os arquivos forem tratados como Unicode no Windows.

Cheekysoft

No entanto, outro conjunto de problemas que você pode encontrar pode estar relacionado às codificações de caracteres de byte único/multibyte.Se você vir caracteres estranhos e inesperados (não no final da linha), esse pode ser o motivo.Especialmente se você vir caixas quadradas, pontos de interrogação, pontos de interrogação invertidos, caracteres extras ou caracteres acentuados inesperados.

Sadie

No unix, arquivos que começam com .estão escondidos.No Windows, é um sinalizador de sistema de arquivos ao qual você provavelmente não tem acesso fácil.Isso pode fazer com que arquivos que deveriam estar ocultos agora se tornem visíveis nas máquinas clientes.

As permissões de arquivo variam entre os dois.Você provavelmente descobrirá, ao copiar arquivos em um sistema Unix, que os arquivos agora pertencem ao usuário que fez a cópia e têm direitos limitados.Você precisará usar chown/chmod para garantir que os usuários corretos tenham acesso a eles.

Existem ferramentas para ajudar com o problema:

Paulo

Se você está interessado apenas no conteúdo dos arquivos de texto, sim, os finais de linha são diferentes.Dê uma olhada em algo como dos2unix, pode ser útil aqui.

Cheekysoft

Como sugere pauldoo, ferramentas como dos2unix podem ser muito úteis.Observe que eles podem estar no seu sistema Linux/Unix como fromdos ou tofrodos, ou talvez até mesmo como a recodificação da caixa de ferramentas de uso geral.

Ajuda para codificação java

Cheekysoft

Ao gravar em arquivos ou ler arquivos (que você controla), geralmente vale a pena especificar a codificação a ser usada, pois a maioria dos métodos Java permite isso.No entanto, garantir também que a localidade do sistema corresponda pode evitar muitos problemas

Foi útil?

Solução

Esta é apenas uma diferença em arquivos de texto, onde o UNIX usa um único Line Feed (LF) para indicar uma nova linha, o Windows usa um Carriage Return/Line Feed (CRLF) e o Mac usa apenas um CR.

Arquivos binários não deve haver diferença (ou seja,um JPEG em uma máquina Windows será byte por byte igual ao mesmo JPEG em uma caixa unix.)

Outras dicas

Também pode haver uma diferença na codificação de caracteres nacionais.Não existe "codificação unix", mas muitas variantes do Linux usam UTF-8 como codificação padrão.O Mac OS (que também é unix) usa sua própria codificação (macroman).Não tenho certeza qual é a codificação padrão do Windows.

Mas isso pode ser outra fonte de problemas (além das diferentes quebras de linha).

Quais são os seus problemas?Os problemas relacionados à quebra de linha podem ser facilmente corrigidos com os programas dos2unix ou unix2dos na máquina unix

Se você está interessado apenas no conteúdo dos arquivos de texto, sim, os finais de linha são diferentes.Dê uma olhada em algo como dos2unix, pode ser útil aqui.

(É claro que há muitas outras coisas que diferenciam os arquivos Unix e Windows, mas não acho que você esteja interessado nessas outras diferenças no momento.)

Além das respostas fornecidas, você poderá encontrar problemas com os diferentes sistemas de arquivos:

  • No unix, arquivos que começam com um . estão escondidos.No Windows, é um sinalizador de sistema de arquivos ao qual você provavelmente não tem acesso fácil.Isso pode fazer com que arquivos que deveriam estar ocultos agora se tornem visíveis nas máquinas clientes.

  • As permissões de arquivo variam entre os dois.Você provavelmente descobrirá, ao copiar arquivos em um sistema Unix, que os arquivos agora pertencem ao usuário que fez a cópia e têm direitos limitados.Você precisará usar chown/chmod para garantir que os usuários corretos tenham acesso a eles.

Além das diferenças de nova linha, o marca de ordem de bytes pode causar problemas se os arquivos forem tratados como Unicode no Windows.

Como sugere pauldoo, ferramentas como dos2unix podem ser muito úteis.Observe que eles podem estar no seu sistema Linux/Unix como dedos ou tofrodos, ou talvez até mesmo como uma caixa de ferramentas de uso geral recodificar.

No entanto, outro conjunto de problemas que você pode encontrar pode estar relacionado às codificações de caracteres de byte único/multibyte.Se você vir caracteres estranhos e inesperados (não no final da linha), esse pode ser o motivo.Especialmente se você vir caixas quadradas, pontos de interrogação, pontos de interrogação invertidos, caracteres extras ou caracteres acentuados inesperados.

Executando o comando localidade na sua caixa *nix informará qual é a localidade do sistema.Se for diferente da codificação usada nos arquivos de texto que foram transferidos da máquina Windows, às vezes isso pode causar problemas, dependendo do uso desses arquivos.Você pode usar o muito poderoso recodificar comando para tentar converter entre os diferentes conjuntos de caracteres, bem como quaisquer problemas de finalização de linha. recodificar -l mostrará todos os formatos e codificações entre os quais a ferramenta pode converter.É provável que seja uma lista MUITO longa.

Ao gravar em arquivos ou ler arquivos (que você controla), geralmente vale a pena especificar a codificação a ser usada, pois a maioria dos métodos Java permite isso.No entanto, garantir também que a localidade do sistema corresponda pode evitar muitos problemas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top