it-swarm.it

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

Qual è lo strumento o il metodo più veloce e più 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:

  • Gnu iconv suggerito da Troels Arvin è usato meglio come filtro. Sembra essere universalmente disponibile. Esempio:

    $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
    

    Come sottolineato da Ben , c'è un convertitore online che usa iconv .

  • Gnu recode ( manual ) suggerito da Cheekysoft convertirà uno o più file sul posto. Esempio:

    $ recode UTF8..ISO-8859-15 in.txt
    

    Questo utilizza alias più brevi:

    $ recode utf8..l9 in.txt
    

    Recode supporta anche superfici che può essere utilizzato per convertire tra diversi tipi di finali di linea e codifiche:

    Convertire le nuove righe da LF (Unix) a CR-LF (DOS):

    $ recode ../CR-LF in.txt
    

    File di codifica Base64:

    $ recode ../Base64 in.txt
    

    Puoi anche combinarli.

    Convertire un file UTF8 codificato Base64 con terminazioni di linea Unix al file Latin 1 codificato Base64 con terminazioni di linea Dos:

    $ recode utf8/Base64..l1/CR-LF/Base64 file.txt
    

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? Usando "String", ad es. per il contrario

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

486
Antti Kissaniemi

Utilità stand-alone approccio

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output

Non è necessario specificare uno di questi argomenti. Avranno come impostazione predefinita le impostazioni locali correnti, che di solito sono UTF-8.

214
Troels Arvin

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. +: utilizzato da vim per immettere direttamente il comando all'apertura di 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 UOM-8 BOM
  4. set fenc=utf8: imposta la 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 pipa)
79
Boop

Sotto Linux è possibile utilizzare il potentissimo comando recode 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 con cui lo strumento può convertire. È probabile che sia una lista MOLTO lunga.

35
Cheekysoft

iconv (1)

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

Inoltre ci sono strumenti basati su iconv in molte lingue.

19
Daniel Papasian
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
19
Jay Bazuzi

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
14
Arne Evertsson

Prova Notepad ++

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

13
Jeremy Glover

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.

Per cui file -bi significa:

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

  • -i, --mime
    Fa sì che il comando file generi stringhe di tipo mime piuttosto che quelle più leggibili da umani. Quindi si può dire 'testo/plain; charset = us-ascii 'piuttosto che "testo ASCII".

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

Clicca qui per più find in abbondanza .

9
Serge Stroobandt

PHP iconv ()

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

3
user15096

DOS/Windows: usa Code page

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

Il comando chcp può essere utilizzato per modificare la tabella 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.

2
lalthomas

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 <selected package>

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

Spero che questo aiuti qualcuno.

1
Maciel Bombonato

Il mio strumento preferito è Jedit (un editor di testo basato su Java) che ha due caratteristiche molto utili:

  • Uno che consente all'utente di ricaricare un testo con una codifica diversa (e, in quanto tale, controllare visivamente il risultato)
  • Un altro che consente all'utente di scegliere esplicitamente la codifica (e il carattere di fine riga) prima di salvare
0
yota

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

0
kinORnirvana

Con 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

0
Dorian

Basta cambiare la codifica del file caricato in IntelliJ IDEA IDE, a destra della barra di stato (in basso), dove viene indicato il set di caratteri corrente. Richiede Ricarica o Converti, usa Converti. Assicurati di aver eseguito il backup del file originale in anticipo.

0