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