Einzelnen Beitrag anzeigen

hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#16

AW: Unicode String in FileStream speichern/auslesen

  Alt 14. Feb 2011, 16:11
So, ich habe die Speicher- & Lade-Prozedur von himitsu etwas abgeändert, damit ich, wenn ich das Projekt für Mac portiere nicht komplett umschreiben muss, was Variablen und Typenzuweisungen betrifft.

So sieht es aus:

Delphi-Quellcode:
StrToStream(AString: String; AStream: TStream);
var
  Size: LongInt;
  Text: UTF8String;
begin
  Text:= UTF8Encode(AString);
  { Richtig für Unicode-String-Daten }
  Size := Length(Text);
  AStream.Write(Size, SizeOf(Size));
  AStream.Write(PAnsiChar(Text)^, Size);
end;

procedure StrFromStream(var AString: String; AStream: TStream);
var
  Size: LongInt;
  Text: UTF8String;
begin
  { Richtig für Unicode-String-Daten }
  AStream.Read(Size, SizeOf(Size));
  SetLength(Text, Size);
  AStream.Read(PAnsiChar(Text)^, Size);
  AString:= UTF8ToString(Text);
end;
Allerdings sieht die Datei nachher anders aus, als wenn ich die Routinen von himitsu verwende. Die Sonderzeichen ä, ö, ü, ß etc. werden ganz normal angezeigt. Vorher, als ich alle String-Varuiablen als UTF8String definiert hatte, waren sie unleserlich in die Datei geschrieben, aber ordentlich ins Programm geladen worden.

Frage: Handelt es sich dennoch um eine Unicode-Datei, oder nicht mehr?

himitsus Quellcode sah so aus:

Delphi-Quellcode:
StrToStream(AString: UTF8String; AStream: TStream);
var
  Size: LongInt;
begin;
  { Richtig für Unicode-String-Daten }
  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;
HG hansklok
  Mit Zitat antworten Zitat