it-swarm-eu.dev

Converti in batch i file per la codifica

Come posso convertire in batch i file in una directory per la loro codifica (ad esempio ANSI-> UTF-8) con un comando o uno strumento?

Per i singoli file è utile un editor, ma come fare il lavoro sui file di massa?

46
desolat

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

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

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

O in una forma find-all-and-conquer:

## 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, cita CesarB :

Ci sono diverse codifiche che si chiamano "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 che corrisponde solitamente dipende dalla lingua del tuo sistema Windows. Il più comune è CP 1252 (noto anche come Windows-1252). Quindi, quando il tuo editor dice ANSI, significa "qualunque sia la funzione API usata come codifica ANSI predefinita", che è la codifica non Unicode predefinita usata nel tuo sistema (e quindi di solito quella che viene usata per i file di testo).

La pagina a cui si collega dà questo indizio storico (citato da un Microsoft PDF ) sulle origini di CP 1252 e ISO-8859-1, un altro spesso- codifica usata:

[...] questo deriva dal fatto che la tabella codici 1252 di Windows era originariamente basata su una bozza ANSI, che divenne ISO 8859-1. Tuttavia, aggiungendo i punti codice all'intervallo riservato ai codici di controllo nello standard ISO, la tabella codici di Windows 1252 e le successive tabelle codici di Windows originariamente basate sulla serie ISO 8859-x sono state deviate da ISO. Ad oggi, non è raro avere la comunità di sviluppo, sia all'interno che all'esterno di Microsoft, confondere la codepage 8859-1 con Windows 1252, nonché vedere "ANSI" o "A" utilizzati per indicare il supporto di code page di Windows .

36
quack quixote

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, utf32. checkout 'help out-file'.

per convertire tutti i file * .txt in una directory in utf8 fai qualcosa di simile a questo:

% 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.

EDIT: per sostituire i file in tutte le sottodirectory utilizzare:

% foreach($i in ls -recurse -filter "*.Java") {
    $temp = get-content $i.fullname
    out-file -filepath $i.fullname -inputobject $temp -encoding utf8 -force
}
28
akira

La pagina di Wikipedia su newline ha una sezione su 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
6
nagul

UTFCast è un convertitore Unicode per Windows che supporta la modalità batch. Sto usando la versione a pagamento e sto abbastanza bene con esso.

UTFCast è un convertitore Unicode che consente di convertire in batch tutti i file di testo in codifiche UTF con un semplice clic del mouse. È possibile utilizzarlo per convertire una directory piena di file di testo in codifiche UTF, inclusi UTF-8, UTF-16 e UTF-32 in una directory di output, mantenendo la struttura di directory dei file originali. Non importa nemmeno se il tuo file di testo ha un'estensione diversa, UTFCast può rilevare automaticamente i file di testo e convertirli.

3
Tiler

Oneliner usando find, con rilevamento automatico

La codifica dei caratteri di tutti i file di testo corrispondenti viene rilevata automaticamente e tutti i file di testo corrispondenti vengono convertiti in codifica utf-8:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Per eseguire questi passaggi, un sub Shell sh viene utilizzato con -exec, esegue un one-liner con il flag -c e passa il nome del file come argomento posizionale "$1" con -- {}. Nel frattempo, il file di output utf-8 viene temporaneamente chiamato converted.

Il comando find è molto utile per tale automazione della gestione dei file.

Clicca qui per più find in abbondanza .

2
Serge Stroobandt

iconv -f original_charset -t utf-8 originalfile > newfile

eseguire il comando sopra in ciclo for.

1
Aneesh Garg

È possibile utilizzare EncodingMaster . È gratuito, ha una versione per Windows, Linux e Mac OS X e funziona davvero bene.

0
Francisco Vera

Nel mio caso d'uso, avevo bisogno del rilevamento automatico della codifica di input e c'erano molti file con la codifica Windows-1250, per cui il comando file -bi <FILE> restituisce charset=unknown-8bit. Questo non è un parametro valido per iconv.

Ho ottenuto i migliori risultati con enca .

Converti tutti i file con estensione txt in utf-8

find . -type f -iname *.txt -exec sh -c 'echo "$1" && enca "$1" -x utf-8' -- {} \;
0
Bedla

Usa questo script Python: https://github.com/goerz/convert_encoding.py Funziona su qualsiasi piattaforma. Richiede Python 2.7.

0
kinORnirvana

C'è dos2unix su unix.
C'era un altro strumento simile per Windows ( un altro riferimento qui ).

Come faccio a convertire tra file di testo Unix e Windows? ha altri trucchi

0
nik