Tekstkodning

Tags:    diverse

Hvordan finder jeg ud af, hvilken tekstkodning der er brugt til at gemme en tekstfil med?

For nylig har jeg prøvet teksteditoren "e" (http://www.e-texteditor.com). Hvis man gemmer en fil med fx kodningen Baltic, så kan programmet finde kodningen igen, når filen indlæses. Det kan .NET's StreamReader-klasse fx ikke.

Hvad skal man gøre for at finde kodningen i en fil?



Visse kodninger har en idintifikations-streng (Byte Order Mark), som man kan vælge at indsætte i starten af filen. Det er dog ikke i alle filtyper at et sådant BOM kan bruges, og jeg ved kun at Unicode-baserede kodninger har det. Ellers kan man lave en algoritme, der gætter ved at se om filen indeholder dele, som er ugyldige i et bestemt tegnset.



Visse kodninger har en idintifikations-streng (Byte Order Mark), som man kan vælge at indsætte i starten af filen. Det er dog ikke i alle filtyper at et sådant BOM kan bruges, og jeg ved kun at Unicode-baserede kodninger har det.


Ja, men er den ikke frivillig?

Ellers kan man lave en algoritme, der gætter ved at se om filen indeholder dele, som er ugyldige i et bestemt tegnset.


Det forstår jeg ikke. Læser man ikke de enkelte bytes og omsætter dem til tegn med den angivne kodning. Alle bytes er vel tilladte i alle kodninger?



1: Jo, den er frivillig

2: I UTF-8 er der visse tegnfølger, der ikke er lovlige. Det skyldes at ikke alle tegn fylder lige mange bytes, og for at kunne kende forskel på en- og fler-byte-tegn, er visse kombinationer ikke tilladt.



I UTF-8 er der visse tegnfølger, der ikke er lovlige. Det skyldes at ikke alle tegn fylder lige mange bytes, og for at kunne kende forskel på en- og fler-byte-tegn, er visse kombinationer ikke tilladt.


Kan du uddybe det? Evt. med links eller andre kilder?

Nogle tegn bruges ikke i forskellige kodninger. ISO 8859-tabellen http://en.wikipedia.org/wiki/ISO_8859#Table har sådan en oversigt, og så kan man vel bruge udelukkelsesmetoden, hvis nogle af disse tegn forekommer.



Hvis du fx gemmer en tekst med bogstavet æ i ISO-8859-1 og forsøger at åbne det som et UTF-8 dokument, vil du se en fejl, da den byte, der i ISO-8859-1 betegner et æ i UTF-8 ikke kan stå alene.



t