![]() |
Delphi-Version: 5
UTF8 Sonderzeichen Problem
Hallo zusammen,
ich stehe jetzt seit Stunden vor folgendem Problem und komme einfach nicht weiter: Über die idhttp Komponente erhalte ich eine Rückgabe im UTF8 Format. Diese verarbeite ich programmintern mit UTF8ToString. Sämtliche Sonderzeichen und Umlaute funktionieren nun, jedoch nicht das scharfe s "ß". Wenn ich mir die Ausgabe in eine Datei geben lasse und das Zeichen im Notepad++ als Ansi ansehe, zeigt er mir ein großes A mit Tilde an. Auch der Notepad++ Editor kann dieses nicht korrekt im UTF8 Modus darstellen. Wenn ich mir das Zeichen per Hex ansehe kommt ein C3 zum Vorschein. Gemäß ![]() Meine Frage ist jetzt, wie ich dieses Zeichen in Delphi ersetzen kann? Folgendes hat nicht funktioniert:
Code:
Über
StringReplace(response,'Ã','a',[rfReplaceAll]);
![]()
Code:
Möglicherweise ist dies ein ähnliches Problem wie hier?
StringReplace(newStr,#$195,'',[rfReplaceAll]);
![]() Bitte helft mir, ich bin am verzweifeln :cry: Gruß Chris |
AW: UTF8 Sonderzeichen Problem
Du weist das Ergebnis aber wieder Response zu, oder?
|
AW: UTF8 Sonderzeichen Problem
%C3 ist nicht die UTF8-Codierung von ß.
%C3 %9F ist die UTF8-Coierung. In den Quelldaten muss nach dem %C3 also noch ein %9F folgen. Falls nicht hat der erzeuger der Datei mißt gebaut oder die Datei ist währen der Übertragung verlustig gegangen. |
AW: UTF8 Sonderzeichen Problem
Besten Dank für eure schnellen Antworten.
Zitat:
Zitat:
Aber ich weiß offen gesagt auch garnicht, wie ich diesen Hex ersetzen mittels Stringreplace ersetzen könnte? Und wie ich die Response genau analysieren kann ist mir auch nicht klar... Gruß Chris |
AW: UTF8 Sonderzeichen Problem
Zitat:
|
AW: UTF8 Sonderzeichen Problem
erneut vielen Dank für die schnelle Antwort.
Nehmen wir einmal an dies wäre so. Wie kann ich dann "%C3%9F" bzw "%C3%3F" in das eigentlich beabsichtigte ß verwandeln? Oder genauer gesagt: Ich suche wie bereits erwähnt einen Weg um diese fehlerhaften Zeichen im gesamten String durch die richtigen zu ersetzen. Also z.B. eine Stringreplace Variante wie im Ausgangspost. Nur weiß ich nicht wie ich den String auf Vorkommnisse dieser Art prüfen kann? Gruß Chris |
AW: UTF8 Sonderzeichen Problem
Zu dem zeitpunkt wo schon ? in dem text verteilt sind ist es schon zu spät!
Anstatt nachträglich irgendwelche Zeichen zu ersetzten solltest du irgendwie früher anpacken und es gleich richtig dekodieren. Zeig' mal ein bisschen Quelltext. Und noch viel besser: Falls du sie 'rausgeben darfst wäre die URL der Seite auch praktisch um das mit der "falschen Kodierung" nachzuvollziehen. Woher nimmst du eigentlich UTF8toString? Dein Delphi5 dürfte das ja nicht kennen. Hierher? ![]() Oder warst du der, der Lazarus verwendet? Wenn ja, bitte dazu schreiben ;-) |
AW: UTF8 Sonderzeichen Problem
Das Problem ist, dass es sich um Contentdaten handelt, dessen Zugang wir bezahlen müssen. Demnach darf ich die Zugangsdaten oder die Response wohl nicht einfach herausgeben.
Mein Ansatz nur diesen Fehler zu beheben kam daher, da sonst alles richtig konvertiert wird. Datenquelle ist eine xml rss Datei: Zitat:
Code:
Und jetzt wäre meine Idee gewesen, diese fehlerhaften Zeichen bereits vor UTF8ToString zu ersetzen. z.B. mit Stringreplace.
response:=idhttp1.get('url');
responsecon:=UTF8ToString(response); PS: Ich nutze natürlich kein Delphi5 mehr sondern Delphi XE. Delphi 5 dürfte ja mittlerweile schon über 10 Jahre alt sein? Leider habe ich die Angabe beim Topic erstellen in der Hektik übersehen, Verzeihung :oops: EDIT: Problem gelöst. Der Fehler war, dass die idhttp Komponente den Code trotz richtig gesetzten charset zerstückelt hat (zumindest beim ß). Ich habe idhttp nun direkt in einen TMemorystream ausgeben lassen und dann UTF8ToString eingesetzt und es scheint zu funktionieren. Gruß Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 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 by Thomas Breitkreuz