Ist das hier auch annehmbar?
Delphi-Quellcode:
Memo1.Lines.LoadFromFile('file.txt');
Memo1.Text := UTF8ToString(Memo1.Text);
Das Problem mit der Ini-Datei besteht trotzdem noch. Wenn jemand auf die irrsinnige Idee kommt die Datei nach
Ansi zu konvertieren, gibts natürlich ein Problem denn ich hab als Encoding UTF8 beim Create der Ini angegeben.
Und ob das hier eine Lösung ist weiß ich auch nicht
Delphi-Quellcode:
try
inherited Create(FileName, TEncoding.UTF8);
except
on E: EEncodingError do
inherited Create(FileName);
end;
1. Nein, denn LoadFromFile konvertiert von
ANSI nach UTF-16. UTF-16, UCS-2 sowie
ANSI, CP1252 und ISO 8859-1 (LATIN-1) sehen zwar auf westlichen Computern gleich aus, sind es aber nicht.
ANSI ist hier zwar das gleiche wie CP1252, aber UTF-16 (bzw. UCS-2) unterscheidet sich davon bei Zeichen 128-159, weil es dort ISO 8859-1 und nicht CP1252 entspricht. Das Laden eines
ANSI-Datei bildet diese CP1252-Zeichen auf völlig andere Zeichen ab. UTF-8 erwartet aber 128-159 dort, sprich es schlägt fehl.
2. Ich speichere solche Dinge nicht in der INI. Strings konvertiere ich nach etwas sicherem, Base64 oder Hex.
3. Encoding produziert keine Fehler. Encoding tut im Fehlerfall einfach nichts.