Ho avuto dei problemi con i file dei sottotitoli nel video omxplayer. Per risolverlo ho dovuto convertire da Windows-1250 a codifica UTF-8. La mia domanda è: come posso vedere per alcuni file specifici quale codifica viene utilizzata?
Ho avuto dei problemi con i file dei sottotitoli nel video omxplayer. Per risolverlo ho dovuto convertire da Windows-1250 a codifica UTF-8. La mia domanda è: come posso vedere per alcuni file specifici quale codifica viene utilizzata?
Risposte:
Non puoi davvero scoprire automaticamente se un file è stato scritto con la codifica X in origine.
Quello che puoi facilmente fare è verificare se il file completo può essere decodificato con successo in qualche modo (ma non necessariamente correttamente) usando un codec specifico. Se trovi byte non validi per una determinata codifica, deve essere qualcos'altro.
Il problema è che molti codec sono simili e hanno gli stessi "schemi di byte validi", interpretandoli semplicemente come caratteri diversi. Ad esempio, ä
una codifica in una potrebbe corrispondere a é
in un'altra o ø
in una terza. Il computer non è in grado di rilevare in che modo interpretare il byte si traduca in un testo leggibile correttamente dall'uomo (a meno che forse non si aggiunga un dizionario per tutti i tipi di lingue e si permetta di eseguire i controlli ortografici ...). Devi anche sapere che alcuni set di caratteri sono in realtà sottoinsiemi di altri, come ad esempio la codifica ASCII fa parte dei codec più comunemente usati come alcuni della famiglia ANSI o UTF-8. Ciò significa ad esempio un testo salvato come UTF-8 che contiene solo caratteri latini semplici, sarebbe identico allo stesso file salvato come ASCII.
Tuttavia, torniamo indietro dalla spiegazione di ciò che non puoi fare a ciò che puoi effettivamente fare:
Per un controllo di base sui file di testo ASCII / non ASCII (normalmente UTF-8), è possibile utilizzare il file
comando. Tuttavia, non conosce molti codec ed esamina solo i primi kB di un file, supponendo che il resto non conterrà nuovi caratteri. D'altra parte, riconosce anche altri tipi di file comuni come vari script, documenti HTML / XML e molti formati di dati binari (il che non è affatto interessante per il confronto di file di testo) e potrebbe stampare informazioni aggiuntive se ci sono righe estremamente lunghe o cosa viene utilizzato il tipo di sequenza newline (ad es. UNIX: LF, Windows: CR + LF).
$ cat ascii.txt
I am an ASCII file.
Just text and numb3rs and simple punctuation...
$ cat utf8.txt
I am a Unicode file.
Special characters like Ω€®Ŧ¥↑ıØÞöäüß¡!
$ file ascii.txt utf8.txt
ascii.txt: ASCII text
utf8.txt: UTF-8 Unicode text
Se ciò non bastasse, posso offrirti lo script Python che ho scritto per questa risposta qui , che analizza i file completi e tenta di decodificarli utilizzando un set di caratteri specificato. Se riesce, quella codifica è un potenziale candidato. Altrimenti se ci sono byte che non possono essere decodificati con esso, puoi rimuovere quel set di caratteri dal tuo elenco.
Un programma chiamato file
può farlo. Esempio:
$ echo aaa >> FILE
$ file FILE
FILE: ASCII text, with CRLF, LF line terminators
$ echo öäü >> FILE
$ file FILE
FILE: UTF-8 Unicode text, with CRLF, LF line terminators
Se sei interessato a come è fatto, vedi src/encoding.c
.
file
fa un'ipotesi, e spesso non è molto buona. Ad esempio, nei miei test ha identificato erroneamente sia MacRoman che CP-1252 come ISO-8859, con il risultato che "š" e "ß" sono stati confusi.
.sql
file e file
ho mostrato che è davvero un gzip
file compresso!
piconv
per cambiare la codifica;)