Domanda

Ho ragione nel ritenere che l'unica differenza tra "file Windows" e "file UNIX" sia l'interruzione di riga?

Abbiamo un sistema che è stato spostato da una macchina Windows a una macchina Unix e stiamo riscontrando problemi con il formato.

Devo automatizzare la traduzione tra Unix/Windows prima che i file vengano consegnati al sistema nel nostro "sistema di trasporto".Probabilmente avrò bisogno di qualcosa per determinare il formato corrente e qualcosa per trasformarlo nell'altro formato.Se è solo il ritorno a capo la grande differenza, sto pensando di leggere semplicemente i file con java.io.Per quanto ne so, sono in grado di gestire entrambi con readLine.E poi riscrivi ogni riga con

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

Riepilogo:

samjudson:

Questa è solo una differenza nei file di testo, dove UNIX utilizza un singolo Line Feed (LF) per indicare una nuova riga, Windows utilizza un Carriage Return/Line Feed (CRLF) e Mac utilizza solo un CR.

a cui Cebjyre elabora:

OS X utilizza LF, lo stesso di UNIX, ma MacOS 9 e versioni precedenti utilizzavano CR

Mo

Potrebbe esserci anche una differenza nella codifica dei caratteri nazionali.Non esiste una "codifica UNIX" ma molte varianti di Linux utilizzano UTF-8 come codifica predefinita.Mac OS (che è anche unix) utilizza la propria codifica (macroman).Non sono sicuro di quale sia la codifica predefinita di Windows.

McDowell

Oltre alle differenze di nuova riga, il segno dell'ordine dei byte può causare problemi se i file vengono trattati come Unicode su Windows.

Sfacciato

Tuttavia, un'altra serie di problemi che potresti incontrare possono essere correlati alle codifiche di caratteri a byte singolo/multi-byte.Se vedi caratteri strani e inaspettati (non alla fine della riga), questo potrebbe essere il motivo.Soprattutto se vedi riquadri quadrati, punti interrogativi, punti interrogativi capovolti, caratteri extra o caratteri accentati inaspettati.

Sadie

Su UNIX, i file che iniziano con .sono nascosti.Su Windows, è un flag del filesystem a cui probabilmente non hai facile accesso.Ciò potrebbe far sì che file che dovrebbero essere nascosti diventino ora visibili sui computer client.

Le autorizzazioni dei file variano tra i due.Probabilmente scoprirai, quando copi file su un sistema UNIX, che i file ora appartengono all'utente che ha eseguito la copia e hanno diritti limitati.Dovrai utilizzare chown/chmod per assicurarti che gli utenti corretti vi abbiano accesso.

Esistono strumenti per aiutare a risolvere il problema:

pauldoo

Se sei interessato solo al contenuto dei file di testo, allora sì, le terminazioni di riga sono diverse.Dai un'occhiata a qualcosa come dos2unix, potrebbe essere d'aiuto qui.

Sfacciato

Come suggerisce pauldoo, strumenti come dos2unix possono essere molto utili.Tieni presente che questi potrebbero trovarsi sul tuo sistema Linux/unix come fromdos o tofrodos, o forse anche come ricodifica del toolbox per uso generale.

Aiuto per la codifica Java

Sfacciato

Quando si scrive su file o si legge da file (di cui si ha il controllo), spesso vale la pena specificare la codifica da utilizzare, poiché la maggior parte dei metodi Java lo consente.Tuttavia, anche garantire che le impostazioni locali del sistema corrispondano può risparmiare molta fatica

È stato utile?

Soluzione

Questa è solo una differenza nei file di testo, dove UNIX utilizza un singolo Line Feed (LF) per indicare una nuova riga, Windows utilizza un Carriage Return/Line Feed (CRLF) e Mac utilizza solo un CR.

File binari non dovrebbero esserci differenze (ad es.un JPEG su una macchina Windows sarà byte per byte uguale allo stesso JPEG su una macchina Unix.)

Altri suggerimenti

Potrebbe esserci anche una differenza nella codifica dei caratteri nazionali.Non esiste una "codifica UNIX" ma molte varianti di Linux utilizzano UTF-8 come codifica predefinita.Mac OS (che è anche unix) utilizza la propria codifica (macroman).Non sono sicuro di quale sia la codifica predefinita di Windows.

Ma questa potrebbe essere un'altra fonte di problemi (a parte le diverse interruzioni di riga).

Quali sono i tuoi problemi?I problemi relativi alle interruzioni di riga possono essere facilmente corretti con i programmi dos2unix o unix2dos sulla macchina Unix

Se sei interessato solo al contenuto dei file di testo, allora sì, le terminazioni di riga sono diverse.Dai un'occhiata a qualcosa del genere dos2unix, potrebbe essere d'aiuto qui.

(Ovviamente ci sono molte altre cose che rendono diversi i file Unix e Windows, ma non credo che tu sia interessato a queste altre differenze in questo momento.)

Oltre alle risposte fornite, potresti riscontrare problemi con i diversi file system:

  • Su UNIX, i file che iniziano con a . sono nascosti.Su Windows, è un flag del filesystem a cui probabilmente non hai facile accesso.Ciò potrebbe far sì che file che dovrebbero essere nascosti diventino ora visibili sui computer client.

  • Le autorizzazioni dei file variano tra i due.Probabilmente scoprirai, quando copi file su un sistema UNIX, che i file ora appartengono all'utente che ha eseguito la copia e hanno diritti limitati.Dovrai usare chown/chmod per assicurarsi che gli utenti corretti vi abbiano accesso.

Oltre alle differenze di nuova riga, il contrassegno dell'ordine dei byte può causare problemi se i file vengono trattati come Unicode su Windows.

Come suggerisce pauldoo, strumenti come dos2unix possono essere molto utili.Tieni presente che questi potrebbero trovarsi sul tuo sistema Linux/Unix come fromdos O tofrodos, o forse anche come cassetta degli attrezzi per scopi generali ricodificare.

Tuttavia, un'altra serie di problemi che potresti incontrare possono essere correlati alle codifiche di caratteri a byte singolo/multi-byte.Se vedi caratteri strani e inaspettati (non alla fine della riga), questo potrebbe essere il motivo.Soprattutto se vedi riquadri quadrati, punti interrogativi, punti interrogativi capovolti, caratteri extra o caratteri accentati inaspettati.

Esecuzione del comando locale sulla tua casella *nix ti dirà qual è la locale del sistema.Se questa è diversa dalla codifica utilizzata nei file di testo trasferiti dal computer Windows, a volte può causare problemi, a seconda dell'utilizzo di tali file.Puoi usare il molto potente ricodificare comando per provare a convertire tra i diversi set di caratteri nonché eventuali problemi di fine riga. ricodificare -l ti mostrerà tutti i formati e le codifiche tra cui lo strumento può convertire.È probabile che la lista sia MOLTO lunga.

Quando si scrive su file o si legge da file (di cui si ha il controllo), spesso vale la pena specificare la codifica da utilizzare, poiché la maggior parte dei metodi Java lo consente.Tuttavia, anche garantire che le impostazioni locali del sistema corrispondano può risparmiare molta fatica.

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