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.
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.)
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".
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.
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
+
: 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
|
: separatore di più comandi (come ;
in bash)set nobomb
: no UOM-8 BOMset fenc=utf8
: imposta la nuova codifica su utf-8 doc linkx
: salva e chiude il filefilename.txt
: percorso del file"
: qotes sono qui a causa di pipe. (altrimenti bash li userà come pipa)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.
iconv -f FROM-ENCODING -t TO-ENCODING file.txt
Inoltre ci sono strumenti basati su iconv in molte lingue.
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
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
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"
.
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 .
PHP iconv ()
iconv("UTF-8", "ISO-8859-15", $input);
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.
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.
Il mio strumento preferito è Jedit (un editor di testo basato su Java) che ha due caratteristiche molto utili:
Usa questo script Python: https://github.com/goerz/convert_encoding.py Funziona su qualsiasi piattaforma. Richiede Python 2.7.
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
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.