Es ist doch einfach.
Nur das Programm, welches die Daten erstellt (und vielleicht wieder ließt) entscheidet/weiß 100%ig was für ein Format die Daten in der Datei haben.
ANSI und
ASCII sind halt nur Interpretationen der BYTEs (8-Bit-Daten).
Wenn also keine Definition (um welche Daten es sich genau handelt) in der Datei vorhanden sind, dann gibt es keine sichere Möglichkeit zu prüfen um was es sich handelt.
Für reine Textdateien sind aber auch schon verschiedene Markerbytes definiert:
kein Markerbyte am Dateianfang =
ANSI
$FF $FE am Dateianfang =
UniCode (Low Endian)
$FE $FF am Dateianfang =
UniCode (Big Endian)
$FF $FE $00 $00 am Dateianfang =
UniCode4 (Low Endian)
$00 $00 $FE $FF am Dateianfang =
UniCode4 (Big Endian)
Du kannst es dir so vorstellen ... man nehme Byte, aber wie willst du entscheiden, was in diesem Byte steckt?
ShortInt, Byte, AnsiChar,
ASCII-Char, UTF8-Char, Boolean, Set ...