![]() |
EEncodingError bei RestRequest.Execute
Hi,
ich experimentiere gerade ein wenig mit REST und stoße dabei auf folgendes Problem: Fehlermeldung:
Code:
Server und Client laufen auf dem gleichen System. Kann mir einer sagen, woher dieser Fehler kommt, bzw. was ich falsch mache? (Delphi-Version 10.1)
Im Projekt XYZ.exe ist eine Exception der Klasse EEncodingError mit der Meldung "Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden" aufgetreten.
Servermethode:
Delphi-Quellcode:
Client-Methode: Hier tritt im RestRequest.Execute der Fehler auf.
var
a: TJSONArray; o: TJSONObject; MATKatList: TKategorieList; I: Integer; s: string; begin MATKatList:=TKategorieList.Create; try MATKatList.LoadFromDB; a:=TJSONArray.Create; try for I := 0 to MATKatList.Count-1 do begin o:=TJSONObject.Create; o.AddPair('Lfdnr', TJSONNumber.Create(MATKatList[i].Lfdnr)); o.AddPair('Guid', MATKatList[i].guid); o.AddPair('Kategorie', MATKatList[i].Kategorie); a.AddElement(o); end; finally Response.ContentType:='application/json'; s:=a.ToString; Response.Content:=s; a.DisposeOf; end; finally MATKatList.Free; end;
Delphi-Quellcode:
var
a: TJSONArray; o: TJSONValue; begin RESTClient1.BaseURL:='http://'+hostname+':'+port; RESTRequest1.Resource:='getMATKat'; RESTRequest1.Method:=TRESTRequestMethod.rmGet; RESTRequest1.Response:=frm_ClientMain.RESTResponse1; RESTRequest1.Params.Clear; RESTRequest1.Execute; //<---Hier tritt die Exception auf. if RESTResponse1.Content<>'' then begin con1.ExecSQL('Delete from MatKat'); qry.SQL.Text:='Insert into MatKat (lfdnr, Guid, Kategorie) VALUES (:lfdnr, :guid, :kategorie)'; a:=TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(RESTResponse1.Content), 0) as TJSONArray; for o in a do begin qry.Params.ParamValues['lfdnr']:=Integer(TJSONObject(o).GetValue('Lfdnr').ToString); qry.Params.ParamValues['guid']:=TJSONObject(o).GetValue('Guid').ToString; qry.Params.ParamValues['kategorie']:=TJSONObject(o).GetValue('Kategorie').ToString; qry.ExecSQL; end; a.DisposeOf; end; |
AW: EEncodingError bei RestRequest.Execute
Ich habe mittlerweile herausgefunden, dass die Ursache des Fehler im Server liegen muss. Zwar meldet der Client den Fehler, aber auch der Rest-Debugger liefert diesen Fehler. Und nun gehe ich mal davon aus, dass der wohl nahezu fehlerfrei sein dürfte.
Also wird beim erstellen der Response wohl irgendwas nicht so gemacht, wie der Client das benötigt. Allerdings finde ich auch im Internet keine Lösung zu dem Problem. Hat keiner eine Idee? |
AW: EEncodingError bei RestRequest.Execute
Hallo Captnemo,
Ich hatte den Fehler auch mal. Nur hilft dir das nicht weiter, weil ich mich nicht erinnern kann in welchem Zusammenhang das war... Sorry. :roll: Ich denke an nichts anderes. :wink: |
AW: EEncodingError bei RestRequest.Execute
Zitat:
Ich kenne die Delphi REST Klassen nicht, aber man kann das Encoding sicher auch dort angeben, wo man den ContentType angibt. |
AW: EEncodingError bei RestRequest.Execute
Es gibt die Möglichkeit über Response.ContentEncoding hier Einstellungen vorzunehmen.
Ich habe es mit 'UTF-8', 'Identity', 'plain/text' und 'application/json' versucht. Keine Änderunge. Der ContentType wird ja über die Eigenschaft Respons.ContentType schon als 'application/json' festgelegt. Somit sollte das eigentlich klar sein. Ich habe das so gemacht, wie es in einem Videotutorial ![]() Allerding ist das unter Seattle. Und hier auf der Seite ![]() |
AW: EEncodingError bei RestRequest.Execute
Ich bin grad per Zufall auf eine Lösung gestoßen:
Im Server
Delphi-Quellcode:
Somit wird dann auch der richtige Zeichensatz verwendet, und zumindest der Rest-Debugger erkennt das Response fehlerfrei.
Response.ContentType:='application/json;charset=UTF-8';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz