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.
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.