Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#4

AW: UTF8 String in FileStream speichern/auslesen

  Alt 12. Feb 2011, 15:28
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Feb 2011 um 15:31 Uhr)
  Mit Zitat antworten Zitat