Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Berlin kann keine Umlaute (https://www.delphipraxis.net/189401-berlin-kann-keine-umlaute.html)

braunbaer 8. Jun 2016 16:21

Berlin kann keine Umlaute
 
Hallo zusammen,

ich baue grad eine neue Crossplattform-App.
habe eben festgestellt, dass in der neuen TListview von Berlin die TListItemText auf iOS und Android keine Umlaute mehr kennt.
Ich habe es mit direkter Zuweisung und Livebinding getestet. immer dasselbe Ergebnis - die Umlaute werden als Hyroglyphen angezeigt.
Da wurde offensichtlich sehr viel seit Seattle umgebaut.

Andreas Hausladen hat diesen Blogeintrag zum Thema UTF8 und Berlin geschrieben, das hat mich aber leider nicht weiter gebracht.
Hat jemand einen Tipp oder Workaround für mich??

Ich würde dieses Projekt gerne auf Berlin fertig entwickeln.

Schon mal Danke im Voraus.

Grüsse aus dem Bregenzerwald
Gebhard

Harry Stahl 8. Jun 2016 17:47

AW: Berlin kann keine Umlaute
 
Kann ich erst mal nicht so bestätigen, zumindest eine direkte Zuweisung getestet, funktioniert wie erwartet.

Was hast Du für eine Datenquelle?
Evtl. nicht Unicode-Text?

braunbaer 8. Jun 2016 21:16

AW: Berlin kann keine Umlaute
 
Hallo Harry

Zitat:

Zitat von Harry Stahl
Evtl. nicht Unicode-Text?

Danke für den Hinweis !!
Ich habe vor lauter Bäumen den Wald nicht mehr gesehen :oops:

Da der Datasnapserver kein TFDDataset übergeben kann, habe ich dieses in einen Json - Stream geschrieben.
Dabei hatte ich zuerst keine Konvertierung implementiert.

Hier der korrekte Code:
Server:
Code:
function Tdm.DataSetToJSON(Source: TFDDataSet): string;
var
  stream: TStringStream;
begin
  stream := TStringStream.Create;
  try
    Source.SaveToStream(stream, TFDStorageFormat.sfJSON);
    result := UTF8ToUnicodeString(stream.DataString);
  finally
    stream.Free;
  end;

end;
Gegenstück am Client:
Code:
procedure Tdm.JSONToDataSet(const Source: string; Target: TFDDataSet);
var
  stream: TStringStream;
  utf8Text: UTF8string;
begin
  SetLength(utf8Text, Length(Source) * SizeOf(Char) + 1);
  UnicodeToUtf8(PAnsiChar(utf8Text), Length(utf8Text), PWideChar(Source), Length(Source));

  stream := TStringStream.Create(utf8Text);
  try
    Target.LoadFromStream(stream, TFDStorageFormat.sfJSON);
  finally
    stream.Free;
  end;
end;
Jetzt funktioniert es einwandfrei auf allen Plattformen !!!

vielen Dank.
Gruß
Gebhard


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz