Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Sonderzeichen korrekt grabben mit XmlHttp

Geschrieben von: Christoph Wille
Kategorie: Komponenten

Manches Mal kommt man sich als Entwickler für nicht-englische Sites leicht verlassen vor, da viel Software nur auf Englisch als Sprache ausgerichtet zu sein scheint. Und darunter fällt auch, daß in vielen Fällen die von uns Deutschsprachigen so geliebten Sonderzeichen (Umlaute und dergleichen) des öfteren scheint's "verschluckt" werden - wie zum Beispiel beim Seitengrabbing mit der XmlHttp Komponente des MSXML Parsers.

Für den heutigen Artikel habe ich den MSXML Parser 4.0 verwendet. Dieser kann von MSDN Microsoft XML Core Services 4.0 RTM downgeloadet werden.

Um zu zeigen, was ich mit "verschlucken" von Sonderzeichen meine, habe ich eine sehr minimale Seite (demo.asp) geschrieben, die einige Umlaute beinhaltet:

<html>
  <head><title>Demoseite</title>
</head>
<body>
<p>
Altötting bei München
</p>
</body>
</html>

Im Normalfall versucht man es mit der kürzest möglichen Variante, wie schon im Artikel Webpage-Grabbing mit dem XML Parser demonstriert. Ich habe den Code in die Datei grabplain.vbs verpackt, um ausnahmsweise auf der Kommandozeile testen zu können (eine entsprechend programmierte ASP Seite ist im Download auch vorhanden):

Dim objXmlHttp
Set objXmlHttp = CreateObject("MSXML2.ServerXMLHTTP.4.0")
objXmlHttp.open "GET", "http://127.0.0.1/aspheute/xmlhttp/demo.asp", False
objXmlHttp.send

Wscript.Echo objXmlHttp.responseBody
Set objXmlHttp = Nothing

Nun, der Output enthält verdächtig viele Fragezeichen: die zurückgelieferte Response wird definitiv mit dem falschen Zeichensatz interpretiert. Die nächste Sektion zeigt, wie man es lösen kann.

Richtig mit Character Set

Wer denkt, eine einfache Einstellung am XmlHttp Objekt selbst hilft, irrt in diesem Falle leider. Man muß sich des Stream Objekts von ADO bedienen, das eine Zeichensatzkonvertierung beherrscht. Der entsprechende Sourcecode sieht dann so aus (grabumlauts.asp, eine VBS Datei ist im Download mit dabei):

<% @Language=VBScript %>
<%
Option Explicit

Const adTypeText = 2
Const adReadAll = -1
Dim objXmlHttp, objStream

Set objXmlHttp = Server.CreateObject("MSXML2.ServerXMLHTTP.4.0")
objXmlHttp.open "GET", "http://127.0.0.1/aspheute/xmlhttp/demo.asp", False
objXmlHttp.send

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = adTypeText

objStream.WriteText (objXmlHttp.responseBody)
objStream.Position = 0
objStream.Charset = "latin1"

Response.Write objStream.ReadText(adReadAll)

objStream.close
Set objStream = Nothing

Set objXmlHttp = Nothing
%>

Der Code zum Grabben der Seite ist gleich geblieben, was dazugekommen ist ist das Stream Objekt. Diesem wird der gegrabbte Inhalt übergeben (mittels WriteText), und nach dieser Übergabe gehen wir wieder an den Anfang des Streams (Position=0).

Und der interessanteste Part ist dann objStream.Charset = "latin1". Hier wird das Character Set (Zeichensatz) eingestellt, mit dem die geschriebenen Daten wieder ausgelesen werden sollen, was für unseren Kulturkreis latin1 ist. Nach dieser Einstellung kann der korrekt konvertierte Text mittels ReadText ausgelesen werden, und wir haben statt Sonderzeichen unsere Umlaute erhalten (gilt auch für andere Sonderzeichen).

Wie findet man heraus, welche Einstellungen man für Charset treffen kann? Eine Variante ist die Registry:

Unter HKCR\MIME\Database\Charset findet sich eine Auflistung der Charsets. Wer nicht gerne in der Registry herumsucht, kann sich auch in der MSDN schlau machen: Character Set Recognition.

Schlußbemerkung

Wie man sieht ist die ADODB.Stream Klasse nicht nur im Kontext von Datenbanken ein äußerst praktischer Gehilfe.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Kopieren verboten - Lizenzsicherung bei ASP Scripts
Laden von Dateien aus dem Web mit ASP
Meta Tags von fremden Seiten parsen
Scrapen von Webseiten
Speichern von Recordsets in Application-Variablen (Teil II)
Webpage-Grabbing mit dem XML Parser
Webseiten automatisiert scrapen
Webseiten automatisiert scrapen, Teil 2

Links zu anderen Sites

Character Set Recognition
Microsoft XML Core Services 4.0 RTM

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.