Hvordan oppdage kodingen av en fil?

På filsystemet mitt (Windows 7) har jeg noen tekstfiler (det er SQL-skriptfiler, hvis det har noe å si).

Når jeg åpner dem med Notepad++, rapporteres det i menyen "Encoding" at noen av dem har en koding på "UCS-2 Little Endian" og noen på "UTF-8 without BOM".

Hva er forskjellen her? Alle ser ut til å være helt gyldige skript. Hvordan kan jeg se hvilke kodinger filene har uten Notepad++?

Løsning

Filer angir vanligvis kodingen med en filoverskrift. Det finnes mange eksempler her. Men selv om du leser headeren kan du aldri være sikker på hvilken koding en fil egentlig bruker.

For eksempel er en fil med de tre første byte 0xEF,0xBB,0xBF sannsynligvis en UTF-8-kodet fil. Det kan imidlertid være en ISO-8859-1-fil som tilfeldigvis begynner med tegnene . Eller det kan være en helt annen filtype.

Notepad++ gjør sitt beste for å gjette hvilken koding en fil bruker, og som oftest blir det riktig. Noen ganger tar den imidlertid feil - det er derfor menyen 'Koding' er der, slik at du kan overstyre dens beste gjetning.

For de to kodingene du nevner:

  • "UCS-2 Little Endian" filene er UTF-16-filer (basert på hva jeg forstår fra informasjonen her), så de starter sannsynligvis med 0xFF,0xFE som de første 2 byte. Så vidt jeg kan se, beskriver Notepad++ dem som "UCS-2" siden den ikke støtter visse aspekter av UTF-16.
  • Filene i "UTF-8 uten BOM" har ingen header-byte. Det er det "without BOM"-biten betyr.
Kommentarer (10)

Det kan man ikke. Hvis det hadde vært mulig, ville det ikke vært så mange nettsteder eller tekstfiler med "random gibberish" der ute. Det er derfor kodingen vanligvis sendes sammen med nyttelasten som metadata.

Hvis den ikke er det, kan du bare "gjette", men resultatet er ofte tvetydig, siden samme byte-sekvens kan være gyldig i flere kodinger.

Kommentarer (4)