Pergunta

Será que os seus caracteres de nova linha punho software de outros 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 razões de insanidade, eu estou indo com usando a versão Linux do caractere de nova linha em meus arquivos de texto. Mas, quando eu trazer meus arquivos de texto para dizer o Windows, alguns programas não jogar bem com caracteres de nova linha em meu texto. Como você lida com isso?

Foi útil?

Solução

Como se costuma dizer, ser rigoroso no que você escreve e liberal no que você lê.

A sua aplicação deve ser capaz de funcionar corretamente lendo ambos os finais de linha. Se você quiser usar linefeeds, e potencialmente perturbar os usuários do Windows, isso é bom.

mas poupar para o bloco de notas, a maioria dos programas que eu jogo com parecem estar felizes com ambos os métodos.

(E eu uso o Cygwin no Windows, o que torna tudo interessante)

Outras dicas

A distribuição padrão do Python vem com dois scripts de linha de comando (em Ferramentas / scripts) chamou crlf.py e lfcr.py que pode converter entre Windows e finais de linha Unix / Linux.

[Fonte]

Em .NET, novas linhas são indicados por Environment.NewLine, de modo que o quadro é projetado de forma a tomar qualquer nova linha do sistema é (somente ou LF única CR + LF ou CR) para usar em tempo de execução. Claro que isto é, em última instância útil em Mono.

Eu suspeito que você vai descobrir que a maioria dos programas modernos do Windows (com a notável exceção do bloco de notas) lidar com arquivos de nova linha somente muito bem. No entanto, os arquivos gerados com programas do Windows ainda tendem a ter terminações CRLF.

Na maioria das vezes, os fins de linha será automaticamente tratados de uma forma específica da plataforma pela biblioteca de tempo de execução. Por exemplo, um programa em C que se abre um arquivo com fopen(..., "r") vai ver as linhas de uma forma consistente (somente alimentação de linha) em qualquer plataforma independentemente dos fins de linha real.

Tanto quanto eu sei, é apenas o bloco de notas que tem um problema com separadores de linha. Praticamente nunca outra peça de software no mundo aceita qualquer um desses três tipos de separador, e possibilidade outros também. Infelizmente, o bloco de notas é o editor do primeiro resort para a maioria dos usuários de computador nos dias de hoje. Eu acho que é extremamente irresponsável da Microsoft para permitir que esta situação continue. Eu nunca joguei com o Vista, mas acredito que o problema ainda existe lá, como faz em XP. Qualquer órgão sabe sobre a próxima versão?

Como os outros disse, há grande quantidade de conversores (bastante triviais) em torno de, em caso de necessidade surgir. Note que se você fizer a transferência com FTP em modo ASCII, ele vai fazer a conversão automaticamente ...

Na verdade, o bloco de notas é o programa mais proeminente tendo um problema com LF fim ...

O que eu vi mais irritante é arquivos de texto com linha mista terminando, feito essencialmente por pessoas editar um arquivo do Windows em Unix, ou utilitários adicionar coisas sem verificar o formato adequado.

Para ser feliz, basta seguir recomendação do padrão.

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

E oferecem opções para casos especiais como MacOS idade. Ou lidar com o caso automaticamente se você pode detectá-los com segurança.

Eu recomendo a formatação do texto no estilo Unix. Esqueça os usuários do Windows. Porque há os usuários do Windows utilizar texto simples para documentos ou dados. Eles vão ficar chateado se você passar de texto simples. Eles sempre esperam documento do Word ou Excel. Mesmo que eles usam arquivo de texto simples, o único problema eles vão conseguir é apenas estranhamente exibir texto.

usuários Mas Unix vai experimentar seus todas as ferramentas irá funcionar incorretamente. Especialmente para Unix, siga o padrão estritamente.

PS. Oh, se o usuário do Windows é um desenvolvedor, formato apenas com texto em Unix, e dizer-lhes que é o arquivo de Unix.

Não sei o que você quer dizer quando diz 'acordo' com, mas basicamente você pode apenas dizer algo como:

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

  return line
}

Editar:. Eu suspeito depois de reler a sua pergunta você quer dizer, como você lida com outros programas povos que não podem lidar com incorreta (para o sistema de destino) quebras de linha

gostaria de sugerir ou 1) usando um programa que pode lidar ou 2) executar seus arquivos através de um script que encontra quebras de linha de qualquer tipo e, em seguida, converte-os em qualquer tipo é certo para o seu sistema.

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