Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: UTF8 String auf mobilen Plattformen

  Alt 3. Mär 2016, 18:40
Und was für Exceptions?


Versuch es mal probehalber so
Delphi-Quellcode:
procedure WriteString(Stream: TStream; const str: String); inline;
var
  len: Integer;
  Bytes: TBytes;
begin
  Bytes := TEncoding.UTF8.GetBytes(str);
  len := length(Bytes);
  Stream.Write(len, sizeof(len));
  if len > 0 then
    Stream.WriteBuffer(Bytes, len);
end;

function ReadString(Stream: TStream): String; inline;
var
  len: Integer;
  Bytes: TBytes;
begin
  Stream.Read(len, sizeof(len));
  SetLength(Bytes, len);
  if len > 0 then
    Stream.ReadBuffer(Bytes, len);
    Result := TEncoding.UTF8.GetString(Bytes {, 0, Length(Bytes)});
  else
    Result := '';
end;
Wenn du von Read und Write das Result nicht auswertest, dann besser die Buffer-Varianten verwenden, denn die Prüfen wenigstens, ob wirklich alles gelesen oder geschrieben wurde.

Und die Read/Write-Methoden mit TBytes dereferenzieren das Array auch dann, wenn es leer ist ... könnte sein, dass es da Problemchen gibt.
$2B or not $2B

Geändert von himitsu ( 3. Mär 2016 um 18:51 Uhr) Grund: der Schöne ist Schuld
  Mit Zitat antworten Zitat