Eine Heuristik zur Erkennung der Codierung kann nie 100%ig funktionieren - und nichts anderes versuchst du hier ja. Besser wäre es
imho, für die Ini-Datei ein klar definiertes Format anzugeben. Sinnvoll wäre
imho UTF-8 und die Verwendung von TMemInifile im Code.
Dann bringst du glaube ich auch
ANSI und
ASCII durcheinander. Die TIniFiles unterstützen afaik durchaus mehr als
ASCII - Umlaute sind z.B. kein Problem, solange die Ini-Datei nicht auch auf anderen Systemen mit anderen Ländereinstellungen gelesen wird. Deine Funktion IsAsciiOrUtf16WithoutBOM macht dann auch nicht das, was sie soll, denn mit
Delphi-Quellcode:
if Buffer[i] > 127
then
begin
Exit(False);
// Non-ASCII character found
end;
wird z.B. bei so einer Ini (die als UTF-16 ohne BOM gespeichert wird)
Code:
[Greetings]
value1=Hallöle
trotzdem false zurückgeliefert, weil das "ö" als $F6 $00 kodiert wird - und $F6 ist größer als 127.
The angels have the phone box.