Home » Tipps & Tricks » Dateien/Verzeichnisse » Textdateien » Unicode-Codierung erkennen

Unicode-Codierung erkennen

Eine mit Unicode kodierte Textdatei enthällt einen Header, die so genannte BOM (ByteOderMark), der angibt um welche konkrete Unicode-Kodierung(UTF8, UFT16BigEndian, etc.) es sich handelt. Die BOM lässt sich wie folgt auslesen:

type 
  TUnicodeType = (btUTF8, btUTF16BigEndian, btUTF16LittleEndian, btUTF32BigEndian, 
    btUTF32LittleEndian, btNoUnicode);

...

function GetUnicodeTypeFromFile(AFileName: string): TUnicodeType; 
var 
  stream: TFileStream; 
  BOM: AnsiString;
begin 
  stream := TFileStream.Create(AFileName, fmOpenRead); 
  try
    BOM := '    ';
    stream.Read(BOM[1], 4);
  finally 
    stream.Free; 
  end;

  if Copy(BOM, 1, 3) = #$EF#$BB#$BF then
    Result := btUTF8
  else if BOM = #$00#$00#$FE#$FF then
    Result := btUTF32BigEndian
  else if BOM = #$FF#$FE#$00#$00 then
    Result := btUTF32LittleEndian
  else if Copy(BOM, 1, 2) = #$FE#$FF then
    Result := btUTF16BigEndian
  else if Copy(BOM, 1, 2) = #$FF#$FE then
    Result := btUTF16LittleEndian 
  else 
    Result := btNoUnicode; 
end;