Esiste un comando Linux per scoprire se un file è UTF-8?


14

I .inifile Joomla devono essere salvati come UTF-8.

Dopo la modifica non sono sicuro che i file siano UTF-8 o meno.

Esiste un comando Linux simile fileo alcuni comandi che direbbero se un file è effettivamente UTF-8 o no?


4
Non puoi dire la codifica di un file. Puoi solo fare un'ipotesi intelligente. Potresti principalmente indovinare, ma a volte le ipotesi falliscono. fileè un esempio di un programma che fa congetture intelligenti.
Marco,

1
@Marco: è possibile verificare se è valido UTF-8 oppure no. Ci sono alcune codifiche che possono erroneamente passare come UTF-8 valide, ma non accade quasi mai con codifiche / set di caratteri ISO-8859-𝒏 o Windows-125𝒏.
user1686

Risposte:


28

È possibile determinare la codifica del file con il seguente comando:

file -bi filename

3
@nicolas Per MacOS potresti provare file -I filename(-I è una i maiuscola).
Rik,

5
Questo legge l'intero file?
ctrl-alt-delor

2
@ kojow7 utf-8 non ha intestazione. ASCII puro (solo 7 bit), non è distinguibile da utf-8 (questo è il punto, un'intestazione causerà tutti i tipi di problemi). Quindi, se hai un file ASCII per il primo MB, allora ha un singolo carattere UTF-8, allora non lo saprai, a meno che tu non legga l'intero file.
ctrl-alt-delor,

3
Questo non dovrebbe essere accettato come risposta. Il comando 'file' non lo fa; legge solo una parte del file e utilizza i numeri magici per fare una buona ipotesi. A volte 'file' può e ti darà la risposta errata. Per verificare se un file passa una codifica come ascii, iso-8859-1, utf-8 o qualsiasi altra cosa, una buona soluzione consiste nell'utilizzare il comando 'iconv'.
Tim

1
L'ho provato, e può e fallisce.
Tim

9

C'è, usa il isutf8comando dal pacchetto moreutils .

Fonte: come si può sapere se un file è codificato UTF-8 o no?



@davidpostill Sono curioso, è una cattiva pratica citare l'autore nel riferimento?
Pablo Olmos de Aguilera C.,

No. Comunque, è buona prassi far dire al link dove mi porta. Supponiamo che sto leggendo solo il testo blu. Dopo la modifica, posso dire perché e quando dovrei fare clic su quello. Prima non potevo. (Non sono stato io a fare la modifica, ma sono sicuro al 94% che questo è ciò di cui si trattava.)
Hermann Döppes

Bello, e funziona bene con find -type f -exec isutf8 {} +, perché cita anche il nome del file. (E con l'uso find ... -exec ... +è anche veloce)
Tomasz Gandor

2

Non usare il filecomando Non ispeziona l'intero file e sostanzialmente indovina. A volte dà risposte errate.

Puoi verificare se un file supera la codifica UTF-8 in questo modo:

$ iconv -f utf8 <filename> -t utf8 -o /dev/null

Un codice di ritorno pari a zero indica che passa UTF8. Un codice di ritorno diverso da zero indica che non è valido UTF8.

Non è possibile sapere se un file è stato necessariamente esportato utilizzando uno schema di codifica particolare, poiché alcuni schemi di codifica si sovrappongono. Per fare ciò richiederebbe che i metadati fossero incorporati nel file, e anche allora ti fideresti di chiunque abbia generato quel file, piuttosto che convalidarlo tu stesso ... e dovresti sempre convalidarlo tu stesso.


0

Ancora un altro modo è quello di utilizzare recode, che uscirà con un errore se tenta di decodificare UTF-8 e incontra caratteri non validi.

if recode utf8/..UCS < "$FILE" >/dev/null 2>&1; then
    echo "Valid utf8 : $FILE"
else
    echo "NOT valid utf8: $FILE"
fi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.