Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü" (https://www.delphipraxis.net/183410-idhttp1-get-iso-8859-15-problem-darstellung-von-oeoeaeaessueue.html)

Bladefire 7. Jan 2015 18:31

idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Hallo,

ich habe ein problem beim darstellen des quellcodes den ich zuvor heruntergeladen habe. Die Umlaute werden nicht korrekt angezeigt. (sie werden als 2 Zeichen dargestellt. Darum denke ich, dass delphi den text in einer kodierung darstellt, die kleiner als iso-8859-15 ist)

Code:
IdHTTP1.Request.AcceptCharSet := 'iso-8859-15,iso-8859-1, utf-8, utf-16, *;q=0.1';
memo1.text := idhttp1.get(URL);

Showmessage(idhttp1.Response.charset)
(*
  = charset=iso-8859-15
*)
Über antworten freue ich mich sehr.

Lg Simon

Bernhard Geyer 7. Jan 2015 19:23

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
wie schauen denn die Sonderzeichen aus? Ich tipp mal das du einfach UTF8To(Wide)String aufrufen musst.

Bladefire 7. Jan 2015 19:46

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
hat leider nicht funktioniert.



ß wird als à dargestellt und die bitfolge würde so aussehen: //(11011111) DF

Die großen Umlaute sind ebenfalls betroffen.

ü wird als ÃŒ dargestellt und die bitfolge würde so aussehen: //(11111100)FC

ä wird als À dargestellt und die bitfolge würde so aussehen: //(11100100) E4

ö wird als ö dargestellt und die bitfolge würde so aussehen://(11110110) F6

sofern man darauf vertraun kann, dass ich die Daten ISO 8859-15 kodiert erhalten habe.

Bladefire 8. Jan 2015 14:03

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
*push

Bernhard Geyer 8. Jan 2015 14:12

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Nach dem Mapping von http://en.wikipedia.org/wiki/ISO/IEC...rom_ISO-8859-1 würde ich sagen das eigentlich UTF8-Codierte Daten geliefert wurden, aber durch das Mapping diese kaputt gemacht wurden.
würde

ü -(UTF8)-> ü -(Mapping)-> ÃŒ

Evtl. reicht es einfach das Mapping umzudrehen Œ -> ¼ um dann UTF8 nach (Wide)String zu wandeln.

Bladefire 8. Jan 2015 15:09

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Danke für die Antwort.

ich fasse es nochmal zusammen, ob ich es auch richtig verstanden habe.

ö währe in utf-8: 11000011 10110110

11000011 10110110 ist Jedoch in ISO 8859-15: ö


ü währe in utf-8: 11000011 10111100

11000011 10111100 ist Jedoch in ISO 8859-15: Ì

Schaut gut aus!

Ich erhalte die daten von der Webseite in utf-8 und sie werden fälschlicherweise als ISO 8859-15 kodiert betrachtet.

Wie kann ich das mapping umdrehen?


Ich dachte dass ich es so machen kann, damit der text als utf-8 betrachtet wird.
Code:
SetCodePage(Text,65001,false);
memo1.text := Text
Der Buchstabe "ö" wird danach korrekt angezeigt.
ß = �?
ä = À
ü = Ì

lg Simon

Bladefire 8. Jan 2015 16:47

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
*push

Bladefire 8. Jan 2015 18:21

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Ich wollte außerdem noch Fragen:

Woher hast du das "ü"?

Bladefire 8. Jan 2015 22:38

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Ich habe mir das ganze (das was ich von der Webseite gefunden habe, und in einen ganz normalen string ohne bearbeitung ausgegeben habe) nochmals in einen hexadezimaleditor (NEXT-Soft HEX Editor) angeschaut.


Buchstabe:
ä
Stattdesen angezeigtes:
À
utf-8 Hexadezimal Code von ä
c3 a4
utf-8 Hexadezimal Code von ä würde als ISO-589-15 ergeben:
À
Im Hexadezimaleditor angezeigtes:
C3 80
UTF-8 Buchstabe des im Hexdezimaleditor angezeigtem:
À

Buchstabe:
ü
Stattdesen angezeigtes:
Ì
utf-8 Hexadezimal Code von ü
c3 bc
utf-8 Hexadezimal Code von ü würde als ISO-589-15 ergeben:
Ì
Im Hexadezimaleditor angezeigtes:
c3 8c
UTF-8 Buchstabe des im Hexdezimaleditor angezeigtem:
Ì

Was sagt mir das?

pelzig 9. Jan 2015 15:28

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Ich habe nicht die geringste Ahnung, was dir das sagt!

Wie ersetzt man denn in einem String alle "À" durch ein "ä", wenn man keine Ahnung hat, was gerade - wie auch immer codiert - heruntergeladen wurde?

Man schaut sich an, was z.B. ein "ä" sein sollte und vergleicht es mit dem Heruntergeladenem.

Von Hinten durch die Brust ins Auge sind das - für die Deutschen Sonderzeichen - halt sieben Stringreplaces (äöüÄÖÜß).

Seit wann kann man sich beim Herunterladen einer HTML-Datei oder einer E-Mail eigentlich darauf verlassen, daß sie richtig codiert ist?

Hab' ich da was verpasst?

MfG

Bladefire 10. Jan 2015 22:40

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Wie es ausschaut kann man dies nicht nachträglich kodieren bzw. ändern, da anscheinend die Byte(s) für ein "Ä" die gleichen sind wie für ein "?".

p80286 11. Jan 2015 05:12

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Zitat:

Zitat von Bladefire (Beitrag 1286185)
Wie es ausschaut kann man dies nicht nachträglich kodieren bzw. ändern, da anscheinend die Byte(s) für ein "Ä" die gleichen sind wie für ein "?".

Jein! Immer wenn es um Character/Strings geht sind zwei Dinge im Spiel, der Zeichensatz und der Font. das "?" ist oft ein Ersatzzeichen für Zeichen, die der Font nicht kennt. Wie Bernhard schon erwähnt hat kann es sein, daß beim Mapping schon etwas schief gelaufen ist. Genauso gut ist es möglich, daß die Kodierung der herunter geladenen Seite nicht in Ordnung ist. Wie schon in einem anderen Thread erwähnt "Computer kennen nur Bytefolgen" Die Darstellung als Buchstaben ist eine Interpretation, und deren Wesen ist es nun mal, das sie falsch sein kann.

Gruß
K-H

Bernhard Geyer 11. Jan 2015 08:24

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Zitat:

Zitat von p80286 (Beitrag 1286189)
das "?" ist oft ein Ersatzzeichen für Zeichen, die der Font nicht kennt.

Ne. Ein Fragezeichen ist ein Fragezeichen. Wenn man das sieht hat eine Stringwandlung für ein Zeichen nicht geklappt (z.B. Chinesische Zeichen in die Westeuropäische Codepage) und selbst ein ähnliches Zeichen (Wandlung ä ins andere Codepage führt oft zu einem a) war nicht möglich. Wenn das Zeichen im Font nicht vorhanden ist sieht man oft einfach eine Rechteck.

Thomasl 23. Jan 2015 21:04

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Ich bin über das gleiche Problem gestolpert

Bei Verwendung wie in diesem Beispiel, aber mit der Translate API
https://theroadtodelphi.wordpress.co...n-from-delphi/
Delphi-Quellcode:
    LIdHTTP:= TIdHTTP.Create(nil);
    try
      LIdHTTP.Request.ContentEncoding := 'utf-8';
      LIdHTTP.Request.BasicAuthentication:= True;
      LIdHTTP.Request.Username:=ApplicationID;
      LIdHTTP.Request.Password:=ApplicationID;
      LIdHTTP.IOHandler:= LIOHandler;
      Response:=LIdHTTP.Get(Format(URI,[TIdURI.PathEncode(QuotedStr(SearchKey)), Top, Skip]));
Also bei Delphi XE7 (Trial) funktioniert alles richtig
und bei Delphi XE4 sind nur die ASCI Zeichen OK
es muss wohl was am Verhalten von Indy oder Delphi angepasst worden sein.

mjustin 24. Jan 2015 07:17

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Zitat:

Zitat von Thomasl (Beitrag 1287608)
Also bei Delphi XE7 (Trial) funktioniert alles richtig
und bei Delphi XE4 sind nur die ASCI Zeichen OK
es muss wohl was am Verhalten von Indy oder Delphi angepasst worden sein.

Man kann in einem XE4 Projekt völlig problemlos auch die aktuellste Indy Version einsetzen, sogar ohne die alte Installation in der Komponenten-Palette anzufassen (einfach neue Indy-Verzeichnisse in den Suchpfad des Projekts einbinden).

Download zum Beispiel über Subversion, oder tägliche Trunk-Schnappschüsse auf http://indy.fulgan.com/ZIP

Thomasl 26. Jan 2015 06:59

AW: idhttp1.get() - iSO 8859-15 - Problem - darstellung von "öÖäÄßÜü"
 
Mit den neuen Indy10 Dateien Funktioniert es jetzt auch mit Delphi XE4


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