Encodingprobleme beim Auslesen von HTMLseiten und Erstellung einer CSV

andiprue

Grünschnabel
Hallo,

momentan habe folgendes Problem.
Ich habe auch einen ähnlichen Thread gefunden, leider funktionieren die dortigen Lösungen in meinem Fall nicht.

Ich lese HTML Dateien ein und extrahiere dort den Titel.
Dieser wird in eine CSV geschrieben.

Bsp.

"0"|"/wasser/00_479gs.htm"|"Entscheidung 2000/479/EG Europäisches Schadstoffemissionsregister"|"Wasser"|"Bund"|"19.09.2007"|"Gesamt"
"1"|"/wasser/00_60gs.htm"|"RL 2000/60/EG Wasser-Rahmen-Richtlinie"|"Wasser"|"Bund"|"19.09.2007"|"Gesamt"
"2"|"/wasser/03_1882gs.htm"|"Verordnung (EG) Nr. 1882/2003 des Europäischen Parlaments und des Rates zur Anpassung der Bestimmungen über die Ausschüsse zur Unterstützung der Kommission bei der Ausübung von deren Durchführungsbefugnissen, die in Rechtsakten vorgesehen sind, für die"|"Wasser"|"Bund"|"19.09.2007"|"Gesamt"
"3"|"/wasser/04_648gs.htm"|"Verordnung (EG) Nr. 648/2004 ?ber Detergenzien"|"Wasser"|"Bund"|"19.09.2007"|"Gesamt"

Leider wird die Konvertierung nicht ganz übernommen.

Geöffnet werden die Dateien in ASCII, dann mittels der Encodingklasse nach utf-8 konvertiert. Egal wie ich die Datei öffne/schreibe/konvertiere es kommen immer Fragezeichen bei ÄÖÜ raus.

Code:
titel = rgxTitle.Match(line).ToString();

                byte[] ASCIItitle = Encoding.ASCII.GetBytes(titel);
                byte[] bytes = Encoding.Convert(Encoding.GetEncoding(0),Encoding.UTF8,ASCIItitle);

                 
                UTF8Encoding enc = new UTF8Encoding();
                titel = enc.GetString(bytes);

Wie macht man es denn richtig ?

Danke :)
 
Hallo,

da die HTML-Datei wahrscheinlich schon schon UTF-8 kodiert ist (sollte im Meta-Tag stehen) solltest du sie auch gleich als UTF-8 öffnen und dir die anschließenden Konvertierungsorgien ersparen.
Ich denke, wenn du die Datei schon mit der falschen Kodierung öffnest, geht die ursprüngliche Kodierung verloren. Da bringt dann eine anschließende Konvertierung auch nix mehr.

Gruß
MCoder
 
Hallo,

danke für deine Antwort, aber leider hat dieser Tipp nichts gebracht.
Ich habe die Dateien jetzt mal mit verschiedenen Encodings geöffnet, leider mit annähernd dem gleichen Ergebnis.

Gruss Andreas
 
Enthält denn die HTML-Datei ein Meta-Tag, in dem die Kodierung drinsteht?
Bespiel:
Code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Wird die Seite im Browser richtig angezeigt?

Gruß
MCoder
 
Du solltest erst mal das Meta-Tag auslesen und die Datei dann nochmal mit genau der Kodierung öffnen. Falls nichts angegeben ist, wird wahrscheinlich "windows-1252" funktionieren.

Gruß
MCoder
 
C#:
StreamReader oReader = new StreamReader("datei.htm", Encoding.GetEncoding("Windows-1252 "));
            
// oder mit dem Versuch automatischer Erkennung
            
StreamReader oReader = new StreamReader("datei.htm", true);
Gruß
MCoder
 
Wie lese ich denn in Windows-1252 ein ?

Die Frage stimmt so nicht ganz: Du kannst höchstens angeben welchen Datensatz die Datei hat und dann entsprechend auslesen.

Du kannst nicht in einem bestimmtem Datensatz einlesen. Du solltest die Datei mit entsprechendem Datzensatz abspeichern z.B. UTF-8 (mit Notepad++ kann man das z.B. machen, aber dann selber die Fehler noch in der Datei korrigieren) und dann auch als UTF-8 einlesen.

Hoffe konnte dir weiterhelfen.
 
Danke.
:):):)

MCoder deine erste Lösung war es !

Ich habe es so benutzt und jetzt werden alle Zeichen korrekt angezeigt.

Code:
StreamReader reader = new StreamReader(@filename,Encoding.GetEncoding("Windows-1252"));
 

Neue Beiträge

Zurück