Hvordan registreres kodningen af en fil?

På mit filsystem (Windows 7) har jeg nogle tekstfiler (det er SQL-scriptfiler, hvis det har betydning).

Når jeg åbner dem med Notepad++, bliver nogle af dem i menuen "Encoding" rapporteret til at have en kodning på "UCS-2 Little Endian" og nogle på "UTF-8 uden BOM".

Hvad er forskellen her? De ser alle ud til at være helt gyldige scripts. Hvordan kan jeg fortælle hvilke kodninger filen har uden Notepad++?

Løsning

Filer angiver generelt deres kodning med en filhoved. Der er mange eksempler her. Men selv ved at læse headerne kan man aldrig være sikker på, hvilken kodning en fil virkelig bruger.

For eksempel er en fil med de første tre bytes 0xEF,0xBB,0xBF sandsynligvis en UTF-8 kodet fil. Det kan dog også være en ISO-8859-1-fil, som tilfældigvis starter med tegnene . Eller det kan være en helt anden filtype.

Notepad++ gør sit bedste for at gætte, hvilken kodning en fil bruger, og for det meste får den ret. Nogle gange tager den dog fejl - det er derfor, at menuen 'Encoding' er der, så du kan tilsidesætte dens bedste gæt.

For de to kodninger, du nævner:

  • De "UCS-2 Little Endian" filer er UTF-16 filer (baseret på hvad jeg forstår fra info her) så sandsynligvis starter med 0xFF,0xFE som de første 2 bytes. Fra hvad jeg kan se, beskriver Notepad++ dem som "ot;UCS-2" da det ikke understøtter visse facetter af UTF-16.
  • Filerne "UTF-8 uden BOM" har ikke nogen header-bytes. Det er det, som "uden BOM" bit betyder.
Kommentarer (10)

Det kan du ikke. Hvis du kunne gøre det, ville der ikke være så mange websteder eller tekstfiler med "tilfældigt sludder" derude. Det er derfor, at kodningen normalt sendes sammen med payload'en som metadata.

Hvis det ikke er tilfældet, kan man kun gætte sig frem til et "smart gæt", men resultatet er ofte tvetydigt, da den samme byte-sekvens kan være gyldig i flere kodninger.

Kommentarer (4)