Habe ich eben reingeschrieben.
Ich erhalte jetzt TEncoding.Default immer dann zurück, wenn alle Versuche UTF-8 zu erkennen schief gehen und nichts vorhanden ist.
UTF-8 mit und ohne BOM erkennen ist ja relativ einfach. Aber solche Western Dateien die fallen durch alle Raster und ganz am Ende der Prüfkette muss man dann eben auf Default ausweichen.
Eine andere Lösung für das Problem ist, dass ich das was zu speichern ist prüfe. Notwendig eigentlich nicht.
Delphi-Quellcode:
for Ch in Str do
begin
if (Ch >= #32) and (Ch <= #127) then
Result := Result + Ch;
end;
Bis zu welchem Bereich kann man bedenkenlos prüfen, um noch im UTF-8-Bereich zu bleiben?
ASCII ist ja scheinbar bis 127. Bis wohin geht denn UTF-8? Weil irgendwann sind die Zeichen so groß, dass sie unter UTF-16 fallen.
Und standardmäßig lade und speichere ich Daten in meinem Programm mit UTF-8-Encoding.
Obwohl ich gerade sehe, dass ich bis
Unicode U+5613 gehen kann und alles richtig gespeichert und geladen wird mit UTF-8.
Das passt denke ich.
" U+24F5C " wird auch korrekt mit UTF 8 kodiert gespeichert und gelesen.
Entweder war mein Delphi damals einfach zu alt für solche Spielchen oder es liegt an Windows 10 dass jetzt alles mit solchen Zeichen funktioniert
https://de.wikipedia.org/wiki/UTF-16