AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

EEncodingError bei RestRequest.Execute

Ein Thema von Captnemo · begonnen am 9. Jan 2017 · letzter Beitrag vom 9. Jan 2017
Antwort Antwort
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

EEncodingError bei RestRequest.Execute

  Alt 9. Jan 2017, 14:25
Hi,
ich experimentiere gerade ein wenig mit REST und stoße dabei auf folgendes Problem:

Fehlermeldung:
Code:
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.
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)

Servermethode:
Delphi-Quellcode:
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;
Client-Methode: Hier tritt im RestRequest.Execute der Fehler auf.
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;
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#2

AW: EEncodingError bei RestRequest.Execute

  Alt 9. Jan 2017, 18:38
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
3.704 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: EEncodingError bei RestRequest.Execute

  Alt 9. Jan 2017, 18:45
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. Ich denke an nichts anderes.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
2.487 Beiträge
 
Delphi 2009 Professional
 
#4

AW: EEncodingError bei RestRequest.Execute

  Alt 9. Jan 2017, 19:02
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?
Auf der Serverseite wird ein Delphi-String als Response verwendet. JSON benutzt normalerweise das UTF-8 Encoding. Kann man z.B. mit einem Browser oder im Debugger sehen, ob der Server tatsächlich UTF-8 oder ein anderes Encoding in der Response angibt?
Ich kenne die Delphi REST Klassen nicht, aber man kann das Encoding sicher auch dort angeben, wo man den ContentType angibt.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5

AW: EEncodingError bei RestRequest.Execute

  Alt 9. Jan 2017, 20:27
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 https://www.youtube.com/watch?v=_P6waeTlhVc auch gemacht ist, nachvollzogen.
Allerding ist das unter Seattle.
Und hier auf der Seite http://mijn-design.com/blog/?p=103 wird ja ein Workaround beschrieben, sofern ich das richtig verstanden habe, den ich aber nicht umsetzen kann, weil ich nicht weiß, wo ich die SessionID herkriege. (Wenn's denn überhaupt hilft).
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#6

AW: EEncodingError bei RestRequest.Execute

  Alt 9. Jan 2017, 20:34
Ich bin grad per Zufall auf eine Lösung gestoßen:

Im Server
      Response.ContentType:='application/json;charset=UTF-8'; Somit wird dann auch der richtige Zeichensatz verwendet, und zumindest der Rest-Debugger erkennt das Response fehlerfrei.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2017 by Daniel R. Wolf