Domanda

Il tuo software gestisce i caratteri newline di altri sistemi?

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

Per motivi di follia, vado con l'utilizzo della versione Linux del personaggio newline nei miei file di testo. Ma quando porto i miei file di testo per dire Windows, alcuni programmi non funzionano bene con i caratteri di nuova riga nel mio testo. Come gestiresti questo?

È stato utile?

Soluzione

Come si suol dire, sii severo in ciò che scrivi e liberale in ciò che leggi.

La tua applicazione dovrebbe essere in grado di funzionare correttamente leggendo entrambi i finali di riga. Se vuoi usare l'alimentazione di linea e potenzialmente turbare gli utenti Windows, va bene.

Ma salvo per Blocco note, la maggior parte dei programmi con cui gioco sembra essere felice con entrambi i metodi.

(E utilizzo Cygwin su Windows, il che rende tutto molto interessante)

Altri suggerimenti

La distribuzione standard di Python viene fornita con due script da riga di comando (in Strumenti / script) chiamati crlf.py e lfcr.py che possono convertire tra terminazioni di linea Windows e Unix / Linux.

[Fonte]

In .NET, le nuove linee sono indicate con Environment.NewLine , quindi il framework è progettato in modo tale da accettare qualunque sia la nuova linea del sistema (CR + LF o CR solo o LF solo) da utilizzare in fase di esecuzione. Naturalmente questo alla fine è utile in Mono.

Sospetto che scoprirai che la maggior parte dei programmi Windows moderni (con la notevole eccezione di Blocco note) gestisce bene solo i file newline. Tuttavia, i file generati con i programmi Windows tendono ancora ad avere terminazioni crlf.

La maggior parte delle volte, le terminazioni di riga verranno gestite automaticamente in modo specifico dalla piattaforma dalla libreria di runtime. Ad esempio, un programma C che apre un file con fopen (..., " r ") vedrà le linee in modo coerente (solo avanzamento riga) su qualsiasi piattaforma indipendentemente dalle terminazioni di riga effettive .

Per quanto ne so, è solo il Blocco note che ha un problema con i separatori di linea. Praticamente qualsiasi altro software al mondo accetta uno di questi tre tipi di separatori e possibilità anche altri. Sfortunatamente, Notepad è l'editore del primo resort per la maggior parte degli utenti di computer al giorno d'oggi. Penso che Microsoft sia estremamente irresponsabile per far continuare questa situazione. Non ho mai giocato con Vista, ma credo che il problema esista ancora lì, come in XP. Qualcuno sa della prossima versione?

Come altri hanno detto, ci sono molti (abbastanza banali) convertitori in giro, se dovesse sorgere la necessità. Se esegui il trasferimento con FTP in modalità Ascii, eseguirà la conversione automaticamente ...

In effetti, Notepad è il programma più importante che ha un problema con la fine di LF ...

Il più fastidioso che ho visto sono i file di testo con fine linea mista, fatti essenzialmente da persone che modificano un file Windows su Unix o utilità che aggiungono cose senza controllare il formato corretto.

Per essere felici, basta seguire le raccomandazioni dello standard.

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

E offri opzioni per casi speciali come il vecchio MacOS. Oppure gestisci il caso automaticamente se riesci a rilevarlo in modo affidabile.

Consiglio di formattare il testo in stile Unix. Dimentica gli utenti di Windows. Perché nessun utente di Windows utilizza il testo normale per documenti o dati. Saranno sconvolti se si passa il testo normale. Si aspettano sempre documenti Word o Excel. Anche se usano file di testo semplice, l'unico problema che avranno è solo la visualizzazione strana del testo.

Ma gli utenti Unix sperimenteranno che tutti i loro strumenti funzioneranno in modo errato. Soprattutto per Unix, seguire rigorosamente lo standard.

PS. Oh, se il tuo utente di Windows è uno sviluppatore, basta formattare con il testo in Unix e dire loro che è il file da Unix.

Non sei sicuro di cosa intendi quando dici "gestisci", ma in pratica puoi semplicemente dire qualcosa del tipo:

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

  return line
}

Modifica: sospetto che dopo aver riletto la tua domanda intendi come gestisci i programmi di altre persone che non sono in grado di gestire interruzioni di riga errate (per il sistema di destinazione).

Suggerirei 1) l'utilizzo di un programma in grado di gestire o 2) l'esecuzione dei file tramite uno script che trova interruzioni di riga di qualsiasi tipo e quindi li converte in qualunque tipo sia adatto al tuo sistema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top