Delphi-PRAXiS
Seite 9 von 9   « Erste     789   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webservice (https://www.delphipraxis.net/196134-webservice.html)

TiGü 14. Mai 2018 08:39

AW: Webservice
 
Bitte prüfen ob Delphi 6 schon die UTF-8 Konvertierungsroutinen kennt:
http://docwiki.embarcadero.com/RADSt...erungsroutinen

InschenierSB 14. Mai 2018 08:55

AW: Webservice
 
Zitat:

Zitat von TiGü (Beitrag 1402010)
Bitte prüfen ob Delphi 6 schon die UTF-8 Konvertierungsroutinenkennt:
http://docwiki.embarcadero.com/RADSt...erungsroutinen

Okay und wie mache ich das genau?! Ich bin auf deinen Link gegangen und habe gleich die erste Funktion ausgewählt. Die Funktion scheint es zu geben: function AnsiToUtf8(...).
Der Rückgabewert ist dann UTF8String....

InschenierSB 15. Mai 2018 09:59

AW: Webservice
 
Hallo hier ein kurzes Statusupdate,

Wie es scheint kann man die Konvertierungsroutinen
http://docwiki.embarcadero.com/RADSt...erungsroutinen
nicht unter Delphi 6 implementieren, sondern erst ab höheren Versionen (z.B. Delphi 2010). Leider können wir mit dem Projekt nicht auf eine Höhere Version gehen, da dies abseits vom Webservice zu umfangreich ist.



Zitat:

Du versendest aber einen String der entweder ANSI (z.B bei Delphi 6) oder UTF32 (z.B. ab Delphi 2009 und neuer) ist.
Und hier IdHTTP1.Request.ContentType:='application/soap+xml;charset=UTF-8'; behauptest du gegenüber dem Empfänger, dass es tatsächlich UTF8 sei (was aber definitiv falsch ist).

Fatal an ANSI vs. UTF8 dass die Standard-Zeichen exakt gleich codiert sind und man sich beim Testen (natürlich mit den Standard-Zeichen) in eine falsche Sicherheit wiegt.
Ist es sicher das Delphi 6 unter Verwendung von IdHttp nur ANSI Strings versenden kann oder gibt es noch andere Möglichkeiten, da dies nicht mehr Zeitkonform ist?

Jumpy 15. Mai 2018 10:20

AW: Webservice
 
Wir benutzen AnsiToUTF8 in D6 für ein altes Webserver-CGI-Projekt und das geht ganz gut. Dort werden Tokens in einer UTF8 codierten HTML-Vorlagen-Datei ersetzt, damit die üblichen Verdächtigen (Umlaute, scharfes S usw.) in den Text kommen und das klappt.

p80286 15. Mai 2018 12:44

AW: Webservice
 
Da es sich bei utf8 um 8Bit-Zeichen(folgen) handelt, kannst Du problemlos mit Ansi-Strings arbeiten. Du mußt "nur" für die richtige Kodierung sorgen falls AnsitUtf8 in D6 nicht vorhanden ist, bastelst Du es Dir halt selber:

Delphi-Quellcode:
function MyAnsitoUTF8(instr:ansistring):ansistring;
var
  i : integer;
begin
  for i:=1 to length(instr) do
  case instr[i] of
    'ä' : result:=result+#$C3+#$A4;
    .....
    else
      result:=result+instr[i];

  end;
end;
Wobei Du natürlich noch die Codepage der Ansi-Codierung beachten mußt.

Gruß
K-H

InschenierSB 17. Mai 2018 06:39

AW: Webservice
 
Zitat:

Zitat von p80286 (Beitrag 1402138)
Da es sich bei utf8 um 8Bit-Zeichen(folgen) handelt, kannst Du problemlos mit Ansi-Strings arbeiten. Du mußt "nur" für die richtige Kodierung sorgen falls AnsitUtf8 in D6 nicht vorhanden ist, bastelst Du es Dir halt selber:

Delphi-Quellcode:
function MyAnsitoUTF8(instr:ansistring):ansistring;
var
  i : integer;
begin
  for i:=1 to length(instr) do
  case instr[i] of
    'ä' : result:=result+#$C3+#$A4;
    .....
    else
      result:=result+instr[i];

  end;
end;
Wobei Du natürlich noch die Codepage der Ansi-Codierung beachten mußt.

Gruß
K-H


Guten Morgen,
vielen Dank an Jumpy und p80286, also es funktioniert unter Delphi 6. Die Funktion zum konvertieren ist schon in Delphi 6 enthalten.
Nachfolgend ein Auszug aus dem Code, falls irgendwann mal andere Leute vor dem gleichen Problem stehen (über die Loop werden nur die einzelnen Elemente der Stringlist übergeben).
Grüße Sebastian
Delphi-Quellcode:
  //Ausgabe zusammenstellen
  HTTP_Stream.Position:=0;

  my_Response_utf8.LoadFromStream(HTTP_Stream);

   // Loop für die StringList Antwort
  For e:= 0 to my_Response_utf8.Count -1 do
  begin
        my_Response_Ansi.Add(utf8toansi(my_Response_Utf8[e]));
  end;

  Memo1.Lines.AddStrings(my_Request_Ansi);
  Memo2.Lines.AddStrings(my_Response_Ansi);


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:38 Uhr.
Seite 9 von 9   « Erste     789   

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