Sur mon système de fichiers (Windows 7), j'ai des fichiers texte (ce sont des fichiers de script SQL, si cela compte).
Lorsqu’il est ouvert avec Notepad ++ , dans le menu "Encodage", il est signalé que certains d’entre eux possèdent un encodage de "UCS-2 Little Endian" et d’autres de "UTF-8 sans BOM".
Quelle est la différence ici? Ils semblent tous être des scripts parfaitement valides. Comment savoir quels sont les encodages du fichier sans Notepad ++?
enca
etchardet
pour les systèmes POSIX.iconv
en particulier est utile à cet effet. Essentiellement, vous parcourez les chaînes / caractères de caractères corrompus à travers différents codages pour voir celui qui fonctionne. Vous gagnez, quand les personnages ne sont plus corrompus. J'aimerais répondre ici, avec un exemple de programmation. Mais c'est malheureusement une question protégée.chardet
ouchardetect
n'est pas disponible sur votre système, vous pouvez installer le paquet via votre gestionnaire de paquets (par exempleapt search chardet
- sous Ubuntu / debian, le paquet est généralement appelépython-chardet
oupython3-chardet
) ou via pip avecpip install chardet
(oupip install cchardet
pour la version plus rapide de c-optimisée).Réponses:
Les fichiers indiquent généralement leur codage avec un en-tête de fichier. Il y a beaucoup d'exemples ici . Cependant, même en lisant l'en-tête, vous ne pouvez jamais être sûr du codage utilisé par un fichier .
Par exemple, un fichier contenant les trois premiers octets
0xEF,0xBB,0xBF
est probablement un fichier codé UTF-8. Cependant, il peut s'agir d'un fichier ISO-8859-1 qui commence par les caractères
. Ou ce pourrait être un type de fichier totalement différent.Notepad ++ fait de son mieux pour deviner quel encodage utilise un fichier, et la plupart du temps, cela fonctionne correctement. Cependant, il arrive parfois qu'il se trompe - c'est pourquoi ce menu "Encodage" est là, vous pouvez donc remplacer sa meilleure estimation.
Pour les deux encodages que vous mentionnez:
0xFF,0xFE
les 2 premiers octets. D'après ce que je peux dire, Notepad ++ les décrit comme "UCS-2" car il ne supporte pas certaines facettes de UTF-16.la source
Vous ne pouvez pas. Si vous pouviez le faire, il n’y aurait pas autant de sites Web ou de fichiers texte contenant du «charabia aléatoire». C'est pourquoi l'encodage est généralement envoyé avec la charge utile sous forme de métadonnées.
Dans le cas contraire, tout ce que vous pouvez faire est une «proposition intelligente», mais le résultat est souvent ambigu, car la même séquence d'octets peut être valide dans plusieurs codages.
la source