J'ai eu quelques problèmes avec les fichiers de sous-titres dans video omxplayer. Pour le résoudre, j'ai dû convertir le codage Windows-1250 en UTF-8. Ma question est, comment puis-je voir pour un fichier spécifique quel encodage est utilisé?
J'ai eu quelques problèmes avec les fichiers de sous-titres dans video omxplayer. Pour le résoudre, j'ai dû convertir le codage Windows-1250 en UTF-8. Ma question est, comment puis-je voir pour un fichier spécifique quel encodage est utilisé?
Réponses:
Vous ne pouvez pas vraiment savoir automatiquement si un fichier a été écrit avec l'encodage X à l'origine.
Cependant, vous pouvez facilement vérifier si le fichier complet peut être décodé avec succès (mais pas nécessairement correctement) à l'aide d'un codec spécifique. Si vous trouvez des octets qui ne sont pas valides pour un encodage donné, ce doit être autre chose.
Le problème est que de nombreux codecs sont similaires et ont les mêmes "modèles d'octets valides", les interprétant simplement comme des caractères différents. Par exemple, un ä
codage dans un peut correspondre à é
un autre ou ø
à un troisième. L'ordinateur ne peut pas vraiment détecter de quelle manière interpréter l'octet donne un texte correctement lisible par l'homme (sauf peut-être si vous ajoutez un dictionnaire pour toutes sortes de langues et le laissez effectuer des vérifications orthographiques ...). Vous devez également savoir que certains jeux de caractères sont en fait des sous-ensembles d'autres, comme par exemple le codage ASCII fait partie des codecs les plus couramment utilisés comme certains de la famille ANSI ou UTF-8. Cela signifie par exemple un texte enregistré en UTF-8 qui ne contient que des caractères latins simples, il serait identique au même fichier enregistré en ASCII.
Cependant, revenons d'expliquer ce que vous ne pouvez pas faire à ce que vous pouvez réellement faire:
Pour une vérification de base des fichiers texte ASCII / non ASCII (normalement UTF-8), vous pouvez utiliser la file
commande. Cependant, il ne connaît pas beaucoup de codecs et il n'examine que les premiers Ko d'un fichier, en supposant que le reste ne contiendra pas de nouveaux caractères. D'un autre côté, il reconnaît également d'autres types de fichiers courants comme divers scripts, des documents HTML / XML et de nombreux formats de données binaires (ce qui n'est cependant pas intéressant pour comparer des fichiers texte) et il peut imprimer des informations supplémentaires s'il y a des lignes extrêmement longues ou quoi le type de séquence de nouvelle ligne (par exemple UNIX: LF, Windows: CR + LF) est utilisé.
$ 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
Si cela ne suffit pas, je peux vous proposer ici le script Python que j'ai écrit pour cette réponse , qui scanne les fichiers complets et essaie de les décoder en utilisant un jeu de caractères spécifié. S'il réussit, ce codage est un candidat potentiel. Sinon, s'il y a des octets qui ne peuvent pas être décodés avec, vous pouvez supprimer ce jeu de caractères de votre liste.
Un programme nommé file
peut le faire. Exemple:
$ 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
Si vous êtes intéressé par la façon dont cela se fait, voyez src/encoding.c
.
file
fait une supposition, et souvent ce n'est pas très bon. Par exemple, lors de mes tests, MacRoman et CP-1252 ont été mal identifiés comme ISO-8859, avec pour résultat que "š" et "ß" ont été brouillés.
.sql
fichier et file
j'ai montré qu'il s'agissait bien d'un gzip
fichier compressé!
piconv
pour changer l'encodage;)