GNU/Linux >> Linux Esercitazione >  >> Linux

Conversione in batch della codifica in file

Cygwin o GnuWin32 forniscono strumenti Unix come iconv e dos2unix (e unix2dos ). Sotto Unix/Linux/Cygwin, ti consigliamo di utilizzare "windows-1252" come codifica invece di ANSI (vedi sotto). (A meno che tu non sappia che il tuo sistema utilizza una codepage diversa da 1252 come codepage predefinita, nel qual caso dovrai dire a iconv la codepage giusta da cui tradurre.)

Converti da uno (-f ) all'altro (-t ) con:

$ iconv -f windows-1252 -t utf-8 infile > outfile

O in una forma trova tutto e conquista:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 {} \> {} \;

In alternativa:

## this will clobber the original files!
$ find . -name '*.txt' -exec iconv --verbose -f windows-1252 -t utf-8 -o {} {} \;

Questa domanda è stata posta molte volte su questo sito, quindi ecco alcune informazioni aggiuntive su "ANSI". In una risposta a una domanda correlata, CesarB menziona:

Esistono diverse codifiche chiamate "ANSI" in Windows. In effetti, ANSI è un termine improprio. iconv non ha modo di indovinare quale vuoi.

La codifica ANSI è la codifica utilizzata dalle funzioni "A" nell'API di Windows (le funzioni "W" utilizzano UTF-16). La codifica a cui corrisponde di solito dipende dalla lingua del sistema Windows. Il più comune è CP 1252 (noto anche come Windows-1252). Quindi, quando il tuo editor dice ANSI, significa "qualunque cosa le funzioni API utilizzino come codifica ANSI predefinita", che è la codifica predefinita non Unicode utilizzata nel tuo sistema (e quindi di solito quella utilizzata per i file di testo).

La pagina a cui si collega fornisce questa curiosità storica (citata da un PDF Microsoft) sulle origini di CP 1252 e ISO-8859-1, un'altra codifica usata spesso:

[...] questo deriva dal fatto che la code page 1252 di Windows era originariamente basata su una bozza ANSI, che divenne lo standard ISO 8859-1. Tuttavia, aggiungendo punti di codice all'intervallo riservato ai codici di controllo nello standard ISO, la code page di Windows 1252 e le successive code page di Windows originariamente basate sulla serie ISO 8859-x deviavano dall'ISO. Fino ad oggi, non è raro che la comunità di sviluppo, sia all'interno che all'esterno di Microsoft, confonda la code page 8859-1 con Windows 1252, oltre a vedere "ANSI" o "A" utilizzati per indicare il supporto della code page di Windows .


Con PowerShell puoi fare qualcosa del genere:

Get-Content IN.txt | Out-File -encoding ENC -filepath OUT.txt

Mentre ENC è qualcosa come unicode , ascii , utf8 e utf32 . Dai un'occhiata a 'help out-file'.

Per convertire tutti i file *.txt in una directory in UTF-8, fai qualcosa del genere:

foreach($i in ls -name DIR/*.txt) { \
    Get-Content DIR/$i | \
    Out-File -encoding utf8 -filepath DIR2/$i \
}

che crea una versione convertita di ogni file .txt in DIR2.

Per sostituire i file in tutte le sottodirectory, usa:

foreach($i in ls -recurse -filter "*.java") {
    $temp = Get-Content $i.fullname
    Out-File -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}

La pagina di Wikipedia sulle nuove righe ha una sezione sulle utilità di conversione.

Questa sembra la soluzione migliore per una conversione utilizzando solo gli strumenti forniti da Windows:

TYPE unix_file | FIND "" /V > dos_file

Linux
  1. Rinominare i file in batch con una numerazione sequenziale?

  2. Come accedere ai file di Ubuntu 11.04 in Windows 7??

  3. Elimina gli aggiornamenti di Windows scaricati

  4. Converti una serie di file BMP in JPEG su Linux

  5. Perché i file EXE di Windows non funzionano su Linux?

Converti la tua installazione di Windows in una VM su Linux

Come convertire in batch file PDF su Linux

Come convertire un file Windows in un file UNIX

10 esempi PuTTY PLINK per automatizzare i comandi Linux remoti dai file batch di Windows

Condivisione di file tra Linux Mint e Windows 10

Dove si trovano i file di configurazione in WSL?