Thema: Delphi Unicode + BASE64?

Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#44

Re: Unicode + BASE64?

  Alt 26. Aug 2007, 19:00
Hallo Daniel,

ohne direkt auf API-Calls zurück zu greifen kannst du die beiden String-Typen wechselseitig so interpretieren:

Delphi-Quellcode:
// Hallo Olli - sieht ähnlich aus wie bei dir in #34!

function StringAsWideString(s: string): WideString;
begin
  SetLength(Result, Length(s) div SizeOf(WideChar));
  Move(s[1], Result[1], Length(s));
end;

function WideStringAsString(ws: WideString): string;
begin
  SetLength(Result, Length(ws) * SizeOf(WideChar));
  Move(ws[1], Result[1], Length(Result));
end;
Weil bei jeder Delphi-Funktion, die mit API String-Funktionen implementiert ist, bei NUL-Zeichen das Ende (C Konvention) eines Strings erkennt, ist tatsächlich der Weg über UTF-8 (das ist es was Bernhard dir mitteilen wollte) der schmerzfreiere:

Delphi-Quellcode:
var
  s: string;
  u: string;
  ws: WideString;

begin
  // to memphis
  s := 'Der King läbt!';
  u := AnsiToUtf8(s);
  ws := Utf8Decode(u);
  // and back
  u := Utf8Encode(ws);
  s := Utf8ToAnsi(u);
Hierbei treten keine Unverträglichkeiten auf.

Wenn du Strings in eine Datei schreibst, dann empfiehlt sich statt der Terminierung die vorgestellte Längenangabe. So können persistente Strings wesentlich effektiver verarbeitet werden.

Dein Thread ist etwas lang geraten und es kann sein, dass ich in der Mitte öfter den Faden verloren habe. Wegen etwaiger Redundanzen bitte nicht schimpfen.

Grüße vom marabu

PS: Bevor mein Beitrag völlig veraltet ist schicke ich ihn mal ab und lese dann den von Olli...
  Mit Zitat antworten Zitat