ChangedCharSetException bei HTMLEditorKit.read()

Status
Nicht offen für weitere Antworten.

s-bolz

Mitglied
Hallo an alle,

ich habe den ganzen Tag damit zugebracht, wie ich am besten eine HTML Seite bearbeite. Ziel soll es sein, nur wichtige Teile rauszusuchen und weiterzuverwenden. Als erstes wollte ich daher die HTML Seite in irgendeiner Form instanziieren. Mein Code sieht in etwa so aus:

Code:
URL u = new URL("www.hastenichtgesehen.de");
BufferedInputStream bis = new BufferedInputStream(u.openStream());
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
try {
   kit.read(isr,doc,0);
} catch (IOException e1) {
   System.out.println("IOException: " + e1);
   e1.printStackTrace();
} catch (BadLocationException e1) {
   System.out.println("BadLocationException: " + e1);
   e1.printStackTrace();
}


Ich bekomme an dieser Stelle immer wieder folgende Exception:
javax.swing.text.ChangedCharSetException
at javax.swing.text.html.parser.DocumentParser.handleEmptyTag(Unknown Source)
at javax.swing.text.html.parser.Parser.startTag(Unknown Source)
at javax.swing.text.html.parser.Parser.parseTag(Unknown Source)
at javax.swing.text.html.parser.Parser.parseContent(Unknown Source)
at javax.swing.text.html.parser.Parser.parse(Unknown Source)
at javax.swing.text.html.parser.DocumentParser.parse(Unknown Source)
at javax.swing.text.html.parser.ParserDelegator.parse(Unknown Source)
at javax.swing.text.html.HTMLEditorKit.read(Unknown Source)
at htmlSource.<init>(htmlSource.java:59)
at htmlSource.main(htmlSource.java:83)


Alles, was ich versucht habe, hat nicht geklappt: Ich habe mit InputStreamReadern gearbeitet und dort z.B. verschiedene Charsets dem Konstruktor übergeben, ich habe die Daten erst mal auf meiner Platte in eine Datei geschrieben und ich habe die API und stundenlang google nach Möglichkeiten durchsucht.

Dabei bin ich auf folgende Info gestoßen:
Laut der API benutzt der Parser standardmäßig DTD 3.2 (???) und in dem HTML File, welches ich bearbeiten will steht oben im Kommentar, dass DTD 4.0 benutzt wird. Also liegt für mich nahe, dass das Problem dort liegt. Kann ich also irgendwoher eine Klasse bekommen, die DTD 4.0 parsen kann und wenn ja, wie kann ich die an der Stelle einbauen? Oder brauche ich das ganze vielleicht nicht und kann die HTML Elemente auch irgendwie anders bearbeiten? Am Ende will ich eigentlich Teile aus der HTML Datei ausschneiden und quasi den Source Code dieses Teils weiterverwenden. Ich schreibe das ganze nämlich als Agent in Lotus Notes und das soll quasi an das Ende einer e-mail rangehängt werden.

Vielen Dank für eure Hilfe!
Basti

P.S.: Ach ja, ich benutze JDK 1.5.0_03 und als IDE Eclipse 3.0.2
 

KISS

Bekanntes Mitglied
ich denke im DocumentParser.parseEmptyTag ist das das problem

Code:
if (!content.equalsIgnoreCase("text/html") && 
				!content.equalsIgnoreCase("text/plain")) {
			    throw new ChangedCharSetException(content, false);

in zusammenhang mit einem meta tag wie
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
leider kenne ich ich micht mit html nicht so gut aus, aber afair ist duer das dokument kein oder ein anderer zeichensatz definiert
 

s-bolz

Mitglied
Danke für die Hilfe, aber leider habe ich das überhaupt nicht mehr hinbekommen. Ich denke, mit dem Parser hast du Recht, aber ich konnte leider keine Lösung dafür finden. Ich bin daher den Umweg gegangen und habe einen eigenen kleinen Parser geschrieben, der mir den Source Code nach den für mich relevanten Tags durchsucht. So kann ich wenigstens verhindern, dass ich aufgrund einer neueren HTML Version plötzlich mein Programm umschreiben muss. Ich betrachte nämlich nur <H1>, <H2> und <TABLE> Tags. Diese werte ich aus und entsprechend dem Ergebnis der Auswertung paste ich alles, was dazwischen ist, in eine Mail. Ich denke nicht, dass sich diese grundlegenden Tags so schnell ändern werden, so dass mein Parser drunter leidet. :D

Also dann, vielen Dank nochmal!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben