AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

UTF8 Sonderzeichen Problem

Ein Thema von Chriscode · begonnen am 9. Jan 2013 · letzter Beitrag vom 10. Jan 2013
Antwort Antwort
Chriscode

Registriert seit: 18. Aug 2009
32 Beiträge
 
#1

UTF8 Sonderzeichen Problem

  Alt 9. Jan 2013, 18:00
Delphi-Version: 5
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äß dieser Tabelle ist dies ebenfalls das große A mit Tilde.

Meine Frage ist jetzt, wie ich dieses Zeichen in Delphi ersetzen kann? Folgendes hat nicht funktioniert:
Code:
StringReplace(response,'Ã','a',[rfReplaceAll]);
Über diese Frage habe ich noch folgende Version erfolgslos probiert:
Code:
StringReplace(newStr,#$195,'',[rfReplaceAll]);
Möglicherweise ist dies ein ähnliches Problem wie hier? http://www.delphipraxis.net/131772-f...ortstring.html

Bitte helft mir, ich bin am verzweifeln

Gruß
Chris
Chris
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: UTF8 Sonderzeichen Problem

  Alt 9. Jan 2013, 18:20
Du weist das Ergebnis aber wieder Response zu, oder?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: UTF8 Sonderzeichen Problem

  Alt 9. Jan 2013, 18:27
%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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Chriscode

Registriert seit: 18. Aug 2009
32 Beiträge
 
#4

AW: UTF8 Sonderzeichen Problem

  Alt 9. Jan 2013, 20:03
Besten Dank für eure schnellen Antworten.

Du weist das Ergebnis aber wieder Response zu, oder?
Ja, aber danke für den Hinweis. Den Fehler hatte ich in der Vergangenheit schon einmal

%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.
Dies könnte durchaus sein. Wäre %C3 dann dieses A mit Tilde? Wenn ich dies im Hex Editor richtig sehe, ist in der Response ein "C3 3F". Demnach hat der Datenbereitsteller mgölicherweise irrtümlich statt 6F ein 3F gewählt?

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
Chris

Geändert von Chriscode ( 9. Jan 2013 um 20:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: UTF8 Sonderzeichen Problem

  Alt 9. Jan 2013, 20:38
Wenn ich dies im Hex Editor richtig sehe, ist in der Response ein "C3 3F". Demnach hat der Datenbereitsteller mgölicherweise irrtümlich statt 6F ein 3F gewählt?
%3F = "?". Und ein Fragezeihen ist eigentlich ein Zeichen dafür das irgendwas mit Zerschossen wurde. %9F wurde fehlerhaft nach %3F gewandelt. Tritt auf wenn versehentlich der UTF8-String in einen ASCII-String gewandelt wird und bei der Wandlung %9F als Fallback in ein Fragezeichen gewandelt wird.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Chriscode

Registriert seit: 18. Aug 2009
32 Beiträge
 
#6

AW: UTF8 Sonderzeichen Problem

  Alt 9. Jan 2013, 21:12
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
Chris

Geändert von Chriscode ( 9. Jan 2013 um 21:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

AW: UTF8 Sonderzeichen Problem

  Alt 9. Jan 2013, 21:24
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? http://stackoverflow.com/questions/7...elphi-versions Dann müsste da aber auch ein WideString raus kommen.
Oder warst du der, der Lazarus verwendet? Wenn ja, bitte dazu schreiben

Geändert von jfheins ( 9. Jan 2013 um 21:26 Uhr)
  Mit Zitat antworten Zitat
Chriscode

Registriert seit: 18. Aug 2009
32 Beiträge
 
#8

AW: UTF8 Sonderzeichen Problem

  Alt 10. Jan 2013, 09:16
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:
<?xml version='1.0' encoding='UTF-8'?>
Quelltext ist halt einfach:
Code:
response:=idhttp1.get('url');
responsecon:=UTF8ToString(response);
Und jetzt wäre meine Idee gewesen, diese fehlerhaften Zeichen bereits vor UTF8ToString zu ersetzen. z.B. mit Stringreplace.

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

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
Chris

Geändert von Chriscode (10. Jan 2013 um 10:07 Uhr)
  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:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 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