Registriert seit: 11. Aug 2007
357 Beiträge
|
UTF8 String auf mobilen Plattformen
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
|
|
Zitat
|