Hoe de encoding van een bestand detecteren?

Op mijn bestandssysteem (Windows 7) staan enkele tekstbestanden (dit zijn SQL script bestanden, als dat iets uitmaakt).

Wanneer ik ze open met Notepad++, wordt in het "Encoding" menu gemeld dat sommige een encoding hebben van "UCS-2 Little Endian" en sommige van "UTF-8 zonder BOM".

Wat is hier het verschil? Het lijken allemaal perfect geldige scripts te zijn. Hoe kan ik zien welke encodings het bestand heeft zonder Notepad++?

Oplossing

Bestanden geven hun codering meestal aan met een file header. Er zijn vele voorbeelden hier. Maar zelfs als je de header leest, kun je er nooit zeker van zijn welke codering een bestand werkelijk gebruikt**.

Bijvoorbeeld, een bestand met de eerste drie bytes 0xEF,0xBB,0xBF is waarschijnlijk een UTF-8 gecodeerd bestand. Het kan echter ook een ISO-8859-1 bestand zijn dat toevallig begint met de tekens . Of het zou een heel ander bestandstype kunnen zijn.

Notepad++ doet zijn best om te raden welke encoding een bestand gebruikt, en meestal heeft het het bij het rechte eind. Soms heeft het het echter mis - daarom is het 'Encoding' menu er, zodat je de beste gok kunt opheffen.

Voor de twee coderingen die u noemt:

  • De "UCS-2 Little Endian" bestanden zijn UTF-16 bestanden (gebaseerd op wat ik begrijp uit de info hier) dus waarschijnlijk beginnen ze met 0xFF,0xFE als de eerste 2 bytes. Voor zover ik kan zien, beschrijft Notepad++ ze als "UCS-2" omdat het bepaalde facetten van UTF-16 niet ondersteunt.
  • De "UTF-8 zonder BOM" bestanden hebben'geen header bytes. Dat'is wat de "zonder BOM" bit betekent.
Commentaren (10)

Dat kunt u niet. Als je dat kon, zouden er niet zoveel websites of tekstbestanden met "willekeurig gebrabbel" zijn. Daarom wordt de codering meestal als meta-gegevens met de payload meegestuurd.

Als dat niet het geval is, is het enige wat je kunt doen een "slimme gok", maar het resultaat is vaak dubbelzinnig omdat dezelfde byte-sequentie in verschillende coderingen geldig kan zijn.

Commentaren (4)