Il modo migliore per convertire i file di testo tra i set di caratteri?

Qual è lo strumento o il metodo più veloce e semplice per convertire i file di testo tra i set di caratteri?

Nello specifico, ho bisogno di convertire da UTF-8 a ISO-8859-15 e viceversa.

Tutto funziona: one-liner nel tuo linguaggio di scripting preferito, strumenti da riga di comando o altre utilità per SO, siti Web, ecc.

Le migliori soluzioni finora:

Su Linux / UNIX / OS X / cygwin:

Su Windows con Powershell ( Jay Bazuzi ):

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

    (Nessun supporto ISO-8859-15 però, dice che i set di caratteri supportati sono unicode, utf7, utf8, utf32, ascii, bigendianunicode, default e oem.)

modificare

Intendi il supporto di iso-8859-1? L’uso di “String” lo fa ad esempio per vice versa

 gc -en string in.txt | Out-File -en utf8 out.txt 

Nota: i possibili valori di enumerazione sono “Sconosciuto, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii”.

  • CsCvt – Il convertitore dei set di caratteri di Kalytta è un altro ottimo strumento di conversione basato su riga di comando per Windows.

Approccio di utilità stand-alone

 iconv -f UTF-8 -t ISO-8859-1 in.txt > out.txt 
 -f ENCODING della codifica dell'input
 -t CODIFICA la codifica dell'output

Prova VIM

Se hai vim puoi usare questo:

Non testato per ogni codifica.

La parte interessante di questo è che non devi conoscere la codifica sorgente

 vim +"set nobomb | set fenc=utf8 | x" filename.txt 

Tieni presente che questo comando modifica direttamente il file


Spiegazione parte!

  1. + : Usato da vim per inserire direttamente il comando quando si apre un file. Solitamente usato per aprire un file su una linea specifica: vim +14 file.txt
  2. | : Separatore di più comandi (come ; in bash)
  3. set nobomb : no utf-8 BOM
  4. set fenc=utf8 : set fenc=utf8 nuova codifica su utf-8 doc link
  5. x : salva e chiude il file
  6. filename.txt : percorso del file
  7. " : qotes sono qui a causa di pipe (altrimenti bash li userà come pipe)

Sotto Linux è ansible utilizzare il comando di ricodifica molto potente per provare e convertire tra i diversi set di caratteri e qualsiasi problema di fine riga. recode -l ti mostrerà tutti i formati e le codifiche che lo strumento può convertire. È probabile che sia una lista MOLTO lunga.

 Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT 

La versione più breve, se si può presumere che la BOM di input sia corretta:

 gc FILE.TXT | Out-File -en utf7 file-utf7.txt 

iconv (1)

 iconv -f FROM-ENCODING -t TO-ENCODING file.txt 

Inoltre ci sono strumenti basati su iconv in molte lingue.

Prova la funzione iconv Bash

Ho inserito questo in .bashrc :

 utf8() { iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp rm $1 mv $1.tmp $1 } 

..per essere in grado di convertire file in questo modo:

 utf8 MyClass.java 

Prova Notepad ++

Su Windows ho potuto usare Notepad ++ per fare la conversione da ISO-8859-1 a UTF-8 . Fai clic su "Encoding" e poi su "Convert to UTF-8" .

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, viene utilizzata una sub shell sh con -exec , che esegue un one-liner con il flag -c e passa il nome del file come argomento posizionale "$1" con -- {} . Nel utf-8 , il file di output utf-8 viene temporaneamente denominato converted .

Per cui file -bi significa:

  • -b, – breve
    Non anteporre i nomi di file alle righe di output (modalità breve).

  • -i, –mime
    Fa sì che il comando file generi delle stringhe di tipo mime piuttosto che quelle più leggibili dall’uomo. Quindi si può dire ‘text / plain; charset = us-ascii ‘piuttosto che “testo ASCII”.

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

Clicca qui per find più a bizzeffe .

PHP iconv ()

iconv("UTF-8", "ISO-8859-15", $input);

DOS / Windows: utilizzare la pagina Codice

 chcp 65001>NUL type ascii.txt > unicode.txt 

Il comando chcp può essere utilizzato per cambiare la chcp codici. La codepage 65001 è il nome Microsoft per UTF-8. Dopo aver impostato la tabella codici, l’output generato dai seguenti comandi sarà impostato con la code page.

L’ editor Yudit supporta e converte tra più codifiche di testo diverse, esegue su linux, windows, mac, ecc.

-Adamo

per scrivere file di proprietà (Java) normalmente lo uso in Linux (distribuzioni mint e ubuntu):

 $ native2ascii filename.properties 

Per esempio:

 $ cat test.properties first=Execução número um second=Execução número dois $ native2ascii test.properties first=Execu\u00e7\u00e3o n\u00famero um second=Execu\u00e7\u00e3o n\u00famero dois 

PS: Ho scritto il numero di esecuzione uno / due in portugues per forzare caratteri speciali.

Nel mio caso, in prima esecuzione ho ricevuto questo messaggio:

 $ native2ascii teste.txt The program 'native2ascii' can be found in the following packages: * gcj-5-jdk * openjdk-8-jdk-headless * gcj-4.8-jdk * gcj-4.9-jdk Try: sudo apt install  

Quando ho installato la prima opzione (gcj-5-jdk) il problema era terminato.

Spero che questo aiuti qualcuno.

Con il ruby:

 ruby -e "File.write('output.txt', File.read('input.txt').encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))" 

Fonte: https://robots.thoughtbot.com/fight-back-utf-8-invalid-byte-sequences

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

Come descritto su Come si corregge la codifica dei caratteri di un file? Synalyze It! ti consente di convertire facilmente su OS X tra tutte le codifiche supportate dalla libreria ICU .

Inoltre è ansible visualizzare alcuni byte di un file tradotto in Unicode da tutte le codifiche per vedere rapidamente quale è quello giusto per il file.