Zitat:
Um die UTF8Strings zu speichern haben ich mir wie von Embacadero vorgeschlagen den folgenden Code verwendet:
Willst du nun UTF8Strings oder UnicodeStrings speichern?
Wenn du schon deine UTF-Strings speichern willst, dann sollte die Speicherfunktion auch auf UTF8 ausgelegt sein.
Delphi-Quellcode:
procedure StrToStream(AString: UTF8String; AStream: TStream);
var
Size: LongInt;
begin
Size := Length(AString);
AStream.
Write(Size, SizeOf(Size));
AStream.
Write(PAnsiChar(AString)^, Size);
end;
procedure StrFromStream(
var AString: UTF8String; AStream: TStream);
var
Size: LongInt;
begin
{ Richtig für Unicode-String-Daten }
AStream.
Read(Size, SizeOf(Size));
SetLength(AString, Size);
AStream.
Read(PAnsiChar(AString)^, Size);
end;
Beim speichern von Binärdaten sollte man sowieso keine dynamischen Datentypen (String, Integer, Char) verwenden, sondern nur auf Native (AnsiString, WideString, UnicodeString, LongInt usw.) zurückgreifen.
PS: Existieren noch alte Dateien, welche mit dem neuen Programm ausgelesen werden sollen?
Wenn, ja dann kannst du das Streamformat der Datei nicht einfach so ändern.
PSS: Brauchst du jetzt unbedingt noch UTF8Strings in deinem neuen Delphi?
Ich denk mal, für de weitere Verarbeitung im Programm kann es einfacher/optimaler sein, wenn du da String/UnicodeString nutzt.