Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: Inhalt eines dynamischen Array in einen String kopieren

  Alt 10. Dez 2009, 19:13
Arg, beim Test hab ich jetzt noch festgestellt, daß die Typeninfos von einem String auf einen Anderen übertragen werden können
(das macht überhaupt keinen Spaß )

z.B. würde man hinter R (also dem UTF8-String genannt "R(UTF)") auch UTF8-kodierte Zeichen vermuten/erwarten
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
type
  PStrRec = ^StrRec;
  StrRec = packed record
    codePage: Word;
    elemSize: Word;
    refCnt: Longint;
    length: Longint;
  end;

type
  TMyString = type AnsiString(28597); // ISO-8859-7 aka CodePage:28597
var
  R: RawByteString;
  A: AnsiString;
  M: TMyString;
  S1, S2, S3, S4, S5: String;

begin
  R := UTF8Encode('ÈÒú');
  A := 'ÈÒú';
  //M := 'ÈÒú';
  //M := #200#210#250;
  SetLength(M, 3); M[1] := #200; M[2] := #210; M[3] := #250;

  S1 := R;
  S2 := A;
  S3 := M;
  UniqueString(AnsiString(R));
  PStrRec(Integer(R) - SizeOf(StrRec)).codePage := CP_NONE;
  UniqueString(AnsiString(M));
  PStrRec(Integer(M) - SizeOf(StrRec)).codePage := CP_NONE;
  S4 := R;
  S5 := M;

  ShowMessage(Format('R(UTF) = %s'#10'A = %s'#10'M(ISO) = %s'#10
    + 'R = %s'#10'M = %s', [S1, S2, S3, S4, S5]));
end;
Vielleicht erkennt man auch, was man für einen Aufwand hat, wenn man sich selber um die Kodierung oder Nicht-Kodierung kümmern möchte.

Gut, dafür kann man diese Automatik auch ausnutzen

früher (vor D2009) sah es so aus
Delphi-Quellcode:
Var S: WideString;
  D: {Ansi}String;

D := UTF8Encode(S);
jetzt (ab D2009) sieht es so aus
Delphi-Quellcode:
Var S: (Unicode)String;
  D: UTF8String;

D := S;
eigentlich würden hier ja die "asiatischen" Schriftzeichen nicht überleben:
Delphi-Quellcode:
var U: String; // ist ein Unicode-String
  A: UTF8String; // ist intern nur ein AnsiString

U := #23456#34567#45678;
A := U;
ShowMessage(A);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat