Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Rest Server Umlaute Indy (https://www.delphipraxis.net/188058-rest-server-umlaute-indy.html)

ScharfeMietze 27. Jan 2016 12:22

Rest Server Umlaute Indy
 
Ich habe eine Frage.

Ich habe mir einen Rest Server erstellt, den ich via http anspreche. Es sind die Grundeinstellungen die Seattle durch seinen Assisenten erstellt.

Zu Testzwecken frage ich ein einfaches Memo ab mit Umlauten.
Delphi-Quellcode:
mmo2.lines.add('üöäpüß???ß++++----');
Siehe da es kommt nur Kauderwelsch rum. Eine Abfrage mit Chrome ergibt.

Code:
{"result":["\u00FC\u00F6\u00E4p\u00FC\u00DF???\u00DF++++----\r\n"]}
Delphi-Quellcode:
function TServerMethods1.Index: string;
begin
Result:= frmServer.mmo2.Lines.Text;
end;
Ist die function die das Ergebnis erzeugt.

Ich hätte nun gern im Browser eine Anzeige in der die Umlaute richtig dargestellt werden.
Kann mir da einer helfen?

Gruß
SM ;)

himitsu 27. Jan 2016 12:52

AW: Rest Server Umlaute Indy
 
Wieso Kauderwelsch?

Das ist ganz normales und vollkommen korrekt Codiertes JSON. :stupid:

ScharfeMietze 27. Jan 2016 13:10

AW: Rest Server Umlaute Indy
 
Das ist schonmal ein Anfang. Danke für die Antwort.
Kann ich den Server auch überreden es nicht in Json zu senden, wen ich nur den einfachen Text brauche?

Json habe ich schon mal geparst, müsste ich Notfalls also hinbekommen.

Gruß
SM

edit: Da es zum Thema gehört.

Delphi-Quellcode:
Uses System.JSON;

var
  s: string;
  LJSONObject: TJSONObject;
begin
 s:= '{"result":["\u00FC\u00F6\u00E4p\u00FC\u00DF???\u00DF++++----\r\n"]}';
   LJSONObject := nil;
  try
    LJSONObject := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(s), 0) as TJSONObject;
    mmo1.Lines.Add(LJSONObject.ToString);
  finally
    LJSONObject.Free;
  end;
end;
Ausgabe
Delphi-Quellcode:
{"result":["üöäpüß???ß++++----
"]}
Vorteil wäre ich bräuchte mir keine Gedanken mehr um weitere Codierungen zu machen.

ScharfeMietze 29. Jan 2016 09:25

AW: Rest Server Umlaute Indy
 
Da es halbwegs zum Thema gehört stelle ich die Frage hier mit

Ich muss ja Server seitig die Ausgabe auch in Json verpacken.

nun habe ich mir mal ein Example angesehen

http://docwiki.embarcadero.com/Libra...Object.AddPair
Delphi-Quellcode:
uses System.json;
 
var
  Obj, ObjCons, ObjIpp: TJSONObject;
 
begin
  Obj := TJSONObject.Create;
  try
    ObjIpp := TJSONObject.Create;
    ObjIpp.AddPair('ipp', TJSONNumber.Create(1122368));
 
    ObjCons := TJSONObject.Create;
    ObjCons.AddPair('decision', 'NA');
    ObjCons.AddPair('idPatient', ObjIpp);
    ObjCons.AddPair('idStructure', TJSONNumber.Create(300000000023887));
 
    Obj.AddPair('consentement', ObjCons);
    Memo1.Lines.Add(Obj.ToJSON);
  finally
    Obj.Free;
  end;
 
end;
Funkpionieren tut es. Die Frage ist, warum brauche ich manchmal ein Create/Free und manchmal nicht? Kann mir das jemand erklären?

Gruß
SM;)

Union 29. Jan 2016 09:35

AW: Rest Server Umlaute Indy
 
Weil die Members im destructor des JSON-Objekts freigegeben werden brauchst Du Referenzen auf diese nicht selber verwalten.

Sir Rufo 29. Jan 2016 09:47

AW: Rest Server Umlaute Indy
 
Diese Objekte haben eine Owner Beziehung die gesetzt wird, wenn du diese zusammenbaust (
Delphi-Quellcode:
Add
und
Delphi-Quellcode:
AddPair
).

Kleiner Tipp:

Erstelle dir für alle JSON Nachrichten eigene Klassen. Diese erzeugst du dann aus den internen Klassen, serialisierst die Json-Nachricht-Instanz und ab damit.

Das geht dann wesentlich strukturierter ;)

ScharfeMietze 29. Jan 2016 11:55

AW: Rest Server Umlaute Indy
 
Ahhhhhhhhhhh
THX SM;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 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