Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HTML Umlaute codieren

99 views
Skip to first unread message

Christian Hansen

unread,
Feb 2, 2005, 11:28:52 AM2/2/05
to
Hallo,

ich habe eine Textdatei, in der Umlaute und Sonderzeichen als HTML-Entities
codiert sind, also "ä" statt "ä". Gibt es in Delphi eine Funktion, die
mir sowas in normales ASCII umwandelt? Es sind in der Datei nur Texte
enthalten, die mit einem westeurpäischen ISO-Zeichensatz darstellbar sein
sollten.

Grüße,
Christian


Stephan Plath

unread,
Feb 2, 2005, 11:54:22 AM2/2/05
to
Christian Hansen schrieb:

Wie wär's einfach mit StringReplace?
Alternativ solltest Du Dir FastStrings (http://www.droopyeyes.com) und
TRegExpr library (http://regexpstudio.com) anschauen.

Stephan


Marian Aldenhövel

unread,
Feb 2, 2005, 11:58:32 AM2/2/05
to
Hi,

> Gibt es in Delphi eine Funktion, die mir sowas in normales ASCII umwandelt?

Nur die Primitivfassung:

type TEntity=record Html,Ansi:string end;
const Entities:array of TEntity=
((Html: 'ä', Ansi: 'ä'),
(Html: 'ü', Ansi: 'ü')...

for i:=Low(Entities) to High(Entities) do
s:=StringReplace(s,Entities[i].Html,Entities[i].Ansi,[rfReplaceAll])

Das ist müh- und langsam und funktioniert nur, wenn Du die Daten komplett am
Stück vorliegen hast.

Für fertige und effizientere Lösungen musst Du Dich bei Drittanbietern
umsehen. Ich habe es nicht nachgeprüft aber Indy hat das sicher (ob das zu
Delphi gehört wäre natürlich diskutabel :-)).

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn. +49 228 624013.
http://www.marian-aldenhoevel.de
"There is a procedure to follow in these cases, and if followed it can
pretty well guarantee a generous measure of success, success here
defined as survival with major extremities remaining attached."

Christian Hansen

unread,
Feb 3, 2005, 7:11:04 AM2/3/05
to
Hallo Stephan,

beide Links sind sehr nett, werde die Sachen mal probieren. Allerdings hatte
ich gehofft nicht für sämtlichen vorkommenden Sonderzeichen ein
stringREplace schreiben zu müssen...

Grüße,
Christian

"Stephan Plath" <stephan.p...@arcor.de> schrieb im Newsbeitrag
news:36ceu0F...@individual.net...

Christian Hansen

unread,
Feb 3, 2005, 7:11:39 AM2/3/05
to
Hallo Mairian,

habe bei INdy nichts gefunden, trotzdem danke!

Grüße,
Christian

"Marian Aldenhövel" <mar...@mba-software.de> schrieb im Newsbeitrag
news:36cf63F...@individual.net...

Torsten Munkelt

unread,
Feb 3, 2005, 7:42:10 AM2/3/05
to
Hallo, Marian und Christian,

> type TEntity=record Html,Ansi:string end;
> const Entities:array of TEntity=
> ((Html: '&auml;', Ansi: 'ä'),
> (Html: '&uuml;', Ansi: 'ü')...

nur fuers Protokoll: Die Eintraege der konstanten
Rekords in dem Feld duerfen nicht mit nem Komma,
sondern muessen mit nem Semikolon abgetrennt werden.
(Haette das auch nicht auswendig gewusst, wenn wir
es nicht letztens davon gehabt haetten.)

Schoene Gruesse - Torsten


Christian Hansen

unread,
Feb 3, 2005, 7:22:28 AM2/3/05
to
Hallo,

unter .NET gibt es in HTTPUtility die Methode "HtmlDecode", die genau das
macht. Ich bräuchte sowas aber unter Win32

Grüße,
Christian


"Christian Hansen" <christia...@hrc-online.de> schrieb im Newsbeitrag
news:ctqv75$oji$1...@beech.fernuni-hagen.de...

Stefan M. Huber

unread,
Feb 3, 2005, 8:11:22 AM2/3/05
to

Ich hab auch etwas schmunzeln müssen :)

Stefan
--
He is spending a year dead for tax reasons.
--- Douglas Adams about Hotblack Desiato
"The Restaurant at the End of the Universe"

Stephan Plath

unread,
Feb 3, 2005, 10:03:52 AM2/3/05
to
Christian Hansen schrieb:

> beide Links sind sehr nett, werde die Sachen mal probieren. Allerdings
> hatte ich gehofft nicht für sämtlichen vorkommenden Sonderzeichen ein
> stringREplace schreiben zu müssen...

Um Dir Deine eigene HtmlDecode-Routine zu schreiben, brauchst Du
schätzungsweise 15-30 Minuten.
Erstelle Dir eine Liste mit den benannten HTML-Sonderzeichen und den
entsprechenden Ansi-Äquivalenten.
Eine Liste findest Du z.B. hier:
http://www.w3.org/TR/html4/sgml/entities.html oder bei selfHTML.
Das was Du brauchst in die Zwischenablage kopieren und in Deinen Code
einfügen. Dann den Delphi-internen Macrorecorder anschmeißen und das ganze
in ein Record-Array umwandeln. Wie man den Macro-Recorder nutzen kann, habe
ich hier vor einiger Zeit mal beschrieben.
Jetzt mußt Du Dich noch für den String-Ersetzungs-Funktion Deiner Wahl
entscheiden (StringReplace, TRegExp, ...) und kannst diese mit Deinem Array
füttern.
Für Unicode-Sonderzeichen z.B. &#228; statt &auml; lassen sich sehr gut die
regulären Ausdrücke verwenden also '&#(\d+);' wobei dann RegExpr.Match[1]
Dein Ansi-Code ist, den Du noch umwandeln muß also
Chr(StrToInt(RegExpr.Match[1])) = 'ä'.

Fertig. :)

Gruß Stephan


Marian Aldenhövel

unread,
Feb 3, 2005, 1:24:14 PM2/3/05
to
Hi,

> nur fuers Protokoll: Die Eintraege der konstanten
> Rekords in dem Feld duerfen nicht mit nem Komma,
> sondern muessen mit nem Semikolon abgetrennt werden.

Das merkt der Compiler.

> (Haette das auch nicht auswendig gewusst, wenn wir
> es nicht letztens davon gehabt haetten.)

Und sagte ich nicht, daß ich es nicht genau weiß :-).

Simon Reinhardt

unread,
Feb 7, 2005, 4:40:12 AM2/7/05
to
Christian Hansen schrieb in news:ctqv75$oji$1...@beech.fernuni-hagen.de:

Du findest entsprechende Funktionen in meiner "SRUtils"-Grabbelkiste.
Download von meiner Komponentenseite.


Simon
--
Don't panic

Homepage: http://www.picsoft.de
Delphi Fundgrube: http://www.delphi-fundgrube.de

Christian Hansen

unread,
Feb 8, 2005, 6:55:59 AM2/8/05
to
Danke an alle, hat mir alles sehr geholfen...

Grüße,
Christian


0 new messages