AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sonderzeichen in Textdateien

Ein Thema von Marphy · begonnen am 29. Mai 2005 · letzter Beitrag vom 2. Jun 2005
Antwort Antwort
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#1

Sonderzeichen in Textdateien

  Alt 29. Mai 2005, 18:58
Hallo zusammen,
ich hab mal wieder eines dieser nervenden, kleinen Problemchen:

Ein Text mit Sonderzeichen (ä ö ü ß | etc.) wird mittels Delphi-Funktionen in die Datei temp.htm gespeichert, welche wiederum ins BrowserControl (gekapselter Internet Explorer) geladen wird. Nun werden statt der gewollten Sonderzeichen aber andere Zeichen (z.B. ÿ) angezeigt, obwohl in der Datei selbst die Sonderzeichen korrekt abgelegt wurden (laut Editor).

So, und wenn ich die temp.htm nun im Editor öffne und sofort wieder speichere, wird sie auch vom BrowserControl korrekt angezeigt. Scheint also am Zeichensatz zu liegen?

Hab schon Diverses versucht, hat leider aber alles nichts geholfen. Ich hoffe, ihr könnt mir mal wieder weiterhelfen.

Danke,
Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Sonderzeichen in Textdateien

  Alt 29. Mai 2005, 19:04
Wenn du die in einer HTM-Datei speicherst könntest du doch auch HTML-Sonderzeichen für Umlaute nutzen...
Code:
ä = ä
ö = ö
ü = ü
Dann sollte es wohl keine Probleme mehr geben...

MfG Florian
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#3

Re: Sonderzeichen in Textdateien

  Alt 29. Mai 2005, 19:45
Hallo Flomei,
danke für die Anregung. Das ist mir aber natürlich auch schon gekommen... Es wäre dennoch schön, wenn es irgendwie anders auch funktionieren würde.

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#4

Re: Sonderzeichen in Textdateien

  Alt 30. Mai 2005, 16:07
Keine Ideen mehr?
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#5

Re: Sonderzeichen in Textdateien

  Alt 30. Mai 2005, 16:29
Nur zur Information: Pushen ist erst nach 24 Stunden erwünscht


Eine andere Möglichkeit gibt es wohl leider nicht. Du könntest ja in der Speicherfunktion eine andere FUnktion aufrufen (ganz am Anfang), die den String bearbeitet (Umlaute in HTML-Form kodieren)

Dazu könnte dir vielleicht Delphi-Referenz durchsuchenStringReplace helfen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Sonderzeichen in Textdateien

  Alt 30. Mai 2005, 17:23
Hallo Marco,

Zitat von Marphy:
Ein Text mit Sonderzeichen (ä ö ü ß | etc.) wird mittels Delphi-Funktionen in die Datei temp.htm gespeichert, welche wiederum ins BrowserControl (gekapselter Internet Explorer) geladen wird. Nun werden statt der gewollten Sonderzeichen aber andere Zeichen (z.B. ÿ) angezeigt, obwohl in der Datei selbst die Sonderzeichen korrekt abgelegt wurden (laut Editor).
Kannst du eine solche HTM-Datei posten? Welchen Editor hast du verwendet?

marabu
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#7

Re: Sonderzeichen in Textdateien

  Alt 31. Mai 2005, 16:06
Hallo zusammen,

Zitat von marabu:
Kannst du eine solche HTM-Datei posten? Welchen Editor hast du verwendet?
HTML-Datei: siehe Anhang.
Editor: den einfachsten, den es gibt: Windows Notepad (damit's auch der letzte versteht: Start | Programme | Zubehör | Editor ).

Zur Demonstration des Problems habe ich ein kleines Projekt erstellt. Ihr könnt es im Anhang runterladen...

Gruß, Marco
Angehängte Dateien
Dateityp: zip testproject_286.zip (2,1 KB, 13x aufgerufen)
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Sonderzeichen in Textdateien

  Alt 31. Mai 2005, 19:59
Hallo Marco,

gut, dass du deinen Quelltext bereit gestellt hast. Ich weiß jetzt, dass du

(1) Text im IE markierst
(2) diesen Text in die Zwischenablage kopierst
(3) diesen Text von dort mit einer eigenen Funktion abholen willst
(4) ihn dann in einer HTM-Datei speichern willst
(5) dich dann wunderst, warum er im Browser falsch angezeigt wird
(6) dich wunderst, dass er im NOTEPAD richtig angezeigt wird
(7) nach Speichern in NOTEPAD auch vom Browser richtig gezeigt wird.

Die ersten zwei Schritte sind unkritisch. Damit der IE die Zwischenablage richtig beschicken kann, registriert er sein eigenes Clipboard-Format mit Namen "HTML Format" und erhält vom System einen Formatschlüssel zurück. In deinem Code verwendest du eine Konstante, die es so nicht gibt.

Delphi-Quellcode:
var
  CF_HTML: integer;
begin
  CF_HTML := RegisterClipboardFormat('HTML Format');
end;
So geht das richtig. Nur am Rande möchte ich erwähnen, dass du beim Arbeiten mit der Delphi ClipBoard-Komponente die Methode HasFormat() statt der API-Funktion IsClipboardFormatAvailable() hättest benutzen können. Ab der Stelle, an der du den Datenzeiger hast, geht es endgültig schief. Das Format CF_HTML ist UTF-8 codiert. Du übernimmst es einfach als AnsiString - das muss schief gehen.

Im Prinzip musst du den Prolog des Formates auswerten. Näheres dazu erfährst du im Platform SDK. Im Prolog erfährst du die Positionen des HTML-Context, des HTML-Fragments und der eigentlichen Selektion, die markiert und kopiert wurde. Erst mit diesen Angaben kannst du vernünftig auf den Speicher zugreifen. Alle im HTML-Context enthaltenen Zeichen solltest du mittels UTF8Decode() für die Weiterverarbeitung nach Ansi umwandeln.

Hast du endlich den HTML-Code in einer korrekten Form erhalten, dann macht sich eigentlich erst das größere Problem bemerkbar: Was wirst du wirklich übernehmen? Das Fragment? Die Selektion? Den ganzen Context? Irgendeinen HTML-Abschnitt zwischen Context und Fragment?

Das wird sicherlich spannend. Und am Ende kommt heraus, dass du eigentlich nur den Text haben wolltest - den du mit ClipBoard.AsText() hättest erhalten können.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#9

Re: Sonderzeichen in Textdateien

  Alt 31. Mai 2005, 20:30
Hallo marabu,
erstmal danke für deine Antwort!

Zitat:
Die ersten zwei Schritte sind unkritisch. Damit der IE die Zwischenablage richtig beschicken kann, registriert er sein eigenes Clipboard-Format mit Namen "HTML Format" und erhält vom System einen Formatschlüssel zurück. In deinem Code verwendest du eine Konstante, die es so nicht gibt.
Sorry, das Beispielprojekt war nicht sorgfältig genug ausgearbeitet... Ich habe mir schon gedacht, dass der IE sein Format "dynamisch" registriert, aber das Format dann doch als Konstante eingebunden.

Im richtigen Projekt werden nacheinander alle Formate aus der Zwischenblage ausgelesen, daher kein Problem.

Zitat:
Nur am Rande möchte ich erwähnen, dass du beim Arbeiten mit der Delphi ClipBoard-Komponente die Methode HasFormat() statt der API-Funktion IsClipboardFormatAvailable() hättest benutzen können.
Oh, hab ich in der Eile wohl übersehen (arbeite aus Performancegründen normalerweise nur mit den Clipboard-API-Funktionen).

Zitat:
Das Format CF_HTML ist UTF-8 codiert. Du übernimmst es einfach als AnsiString - das muss schief gehen.
Eben das ist ja mein Problem....

Zitat:
Im Prinzip musst du den Prolog des Formates auswerten. Näheres dazu erfährst du im Platform SDK. Im Prolog erfährst du die Positionen des HTML-Context, des HTML-Fragments und der eigentlichen Selektion, die markiert und kopiert wurde. Erst mit diesen Angaben kannst du vernünftig auf den Speicher zugreifen.
Danke für den Hinweis! Für eine erste Implementierung wird es aber genügen, den Prolog unberührt zu lassen. "Vernünftig auf den Speicher zugreifen" kann man auch ohne Auswertung des Prologs, das HTML ist dann eben nicht 100% sauber.

Zitat:
Alle im HTML-Context enthaltenen Zeichen solltest du mittels UTF8Decode() für die Weiterverarbeitung nach Ansi umwandeln.
Darauf habe ich gewartet. Das ist der Hinweis, den ich brauch(t)e. Danke!

Zitat:
Das wird sicherlich spannend. Und am Ende kommt heraus, dass du eigentlich nur den Text haben wolltest - den du mit ClipBoard.AsText() hättest erhalten können.
Hältst du mich für ?!

Gruß, Marco
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Marphy

Registriert seit: 24. Feb 2005
162 Beiträge
 
Delphi 7 Professional
 
#10

Re: Sonderzeichen in Textdateien

  Alt 2. Jun 2005, 15:46
Hallo zusammen,
für alle, die es interessiert: Ich habe das kleine Beispielprojekt nun nach marabus Vorschlägen umgeschrieben (Auswertung des Prologs ist jedoch nicht implementiert). Ihr könnt es im Anhang runterladen...

Gruß, Marco
Angehängte Dateien
Dateityp: zip testproject_345.zip (2,2 KB, 15x aufgerufen)
Marco
Wo ein Wille ist, ist auch ein Weg. Aber wo ein Weg ist, ist nicht unbedingt auch ein Wille...
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:29 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