Einzelnen Beitrag anzeigen

Peter666

Registriert seit: 11. Aug 2007
357 Beiträge
 
#1

UTF8 String auf mobilen Plattformen

  Alt 3. Mär 2016, 14:40
Hi,

hat jemand eine Idee warum das hier geht:

Delphi-Quellcode:
procedure WriteString(Stream: TStream; const str: String); inline;
var
  ptr: MarshaledAString;
  len: Integer;
begin
  ptr := MarshaledAString(TMarshal.AllocStringAsUtf8(str));
  len := length(ptr);
  Stream.Write(len, sizeof(len));
  Stream.Write(ptr^, len);
end;

function ReadString(Stream: TStream): String; inline;
var
  len: Integer;
  Bytes: TBytes;
begin
  Stream.Read(len, sizeof(len));
  SetLength(Bytes, len);
  Stream.Read(Bytes, len);
  result := TMarshal.ReadStringAsUtf8(TPtrWrapper.Create(Bytes),len);
end;
und das hier nicht?
Delphi-Quellcode:
procedure WriteString(Stream: TStream; const str: String); inline;
var
  len: Integer;
  Bytes: TBytes;
begin
  Bytes := TEncoding.UTF8.GetBytes(str);//BytesOf(str);
  len := length(Bytes);
  Stream.Write(len, sizeof(len));
  Stream.Write(Bytes, len);
end;

function ReadString(Stream: TStream): String; inline;
var
  len: Integer;
  Bytes: TBytes;
begin
  Stream.Read(len, sizeof(len));
  SetLength(Bytes, len);
  Stream.Read(Bytes, len);
  result := TEncoding.UTF8.GetString(Bytes, Low(Bytes), High(Bytes) + 1);//StringOf(Bytes);
end;
Ist das jetzt ein Fehler in der Implementierung?

Peter
  Mit Zitat antworten Zitat