Merkwürdig ist das aber schon, wenn man sich das SaveToFile von der StringList anschaut, dann läuft das letztlich über SaveToStream und das sieht so aus:
Delphi-Quellcode:
procedure TStrings.SaveToStream(Stream: TStream; Encoding: TEncoding);
var
Buffer, Preamble: TBytes;
begin
if Encoding = nil then
Encoding := FDefaultEncoding;
Buffer := Encoding.GetBytes(GetTextStr);
if WriteBOM then
begin
Preamble := Encoding.GetPreamble;
if Length(Preamble) > 0 then
Stream.WriteBuffer(Preamble, Length(Preamble));
end;
Stream.WriteBuffer(Buffer, Length(Buffer));
end;
Da gibt es ja nicht ansatzweise eine andere Behandlung für Android und vor allem auch nichts, weshalb da plötzlich der BOM doppelt drinsteht.
Müsste man vielleicht mal mit dem Debugger durchsteppen, um zu schauen, wo denn das BOM im Buffer/Ergebnis plötzlich auftaucht oder ob es nicht doch schon vorher irgendwie dort reinkommt.