Was eine CHM wirklich ist
Eine .chm ist ein kleines Dateisystem. Microsoft nannte es ITSS: ein Kopf, ein Verzeichnis von Einträgen und ein oder zwei Inhaltsabschnitte — Abschnitt 0 unkomprimiert, Abschnitt 1 mit LZX gepackt. Darin stecken ganz gewöhnliche HTML-Seiten, Stylesheets und Bilder, dazu einige Metadaten-Streams, deren Namen mit # oder $ beginnen.
Zwei davon zählen hier. #SYSTEM hält den Titel der Hilfedatei und ihr Standardthema fest — die Seite, die ein Betrachter zuerst öffnen sollte. Ohne sie muss ein Leseprogramm raten, und alphabetisches Raten landet meist auf einem Stylesheet. Die .hhc-Datei ist der Inhaltsbaum, geschrieben als HTML-Sitemap aus verschachtelten <UL>- und <LI>-Elementen mit <OBJECT type="text/sitemap">-Einträgen darin.
Echte .hhc-Dateien sind berüchtigt fehlerhaft — überall nicht geschlossene Listenelemente — deshalb werden sie mit dem HTML-Parser des Browsers gelesen, der sich davon genauso erholt wie der ursprüngliche Hilfebetrachter. Ein XML-Parser würde die Datei schlicht ablehnen.
Eine Seite lesen
Stylesheets und Bilder jeder Seite werden gegen den Pfad dieser Seite innerhalb der Hilfedatei aufgelöst und durch die Bytes der CHM selbst ersetzt. Verweise zwischen Themen funktionieren: Die Seite steht in einem iframe gleichen Ursprungs, aber ohne allow-scripts — nichts darin kann ausgeführt werden, während das Werkzeug selbst einen Klick abfangen und zum verlinkten Thema springen kann. Ein Verweis ins offene Netz wird nicht verfolgt, und eine eingefügte Richtlinie default-src 'none' sorgt dafür, dass er nicht einmal versehentlich geholt werden kann.
Zur Kompression — offen gesagt
Das Werkzeug meldet, was die Datei verwendet: LZX mit Fenstergröße und Zahl der Reset-Blöcke, oder gar nichts, wenn alles im gespeicherten Abschnitt liegt.
Der hier verwendete LZX-Decoder wurde nach der Spezifikation [MS-PATCH] und nach lzxd.c aus libmspack geschrieben. Sein Bitstromleser, das kanonische Huffman-Decoding, die unkomprimierten Blöcke und der x86-Filter sind mit Unit-Tests abgedeckt. Das Decoding der Verbatim- und Aligned-Blöcke ist nie gegen eine Datei aus Microsofts eigenem Kompressor gelaufen, weil kein Offline-Korpus zum Prüfen verfügbar war.
Wenn eine Seite sich also nicht entpacken lässt, zeigt dieses Werkzeug den konkreten Fehler und stellt nichts dar. Es bringt die zurückgewonnenen Bytes nicht auf den Schirm. Müll, der wie eine Seite aussieht, ist schlimmer als ein ehrlicher Fehlschlag, weil man den Unterschied nicht sieht. Scheitert hier eine echte Hilfedatei, ist das eine Meldung wert — der Fehler liegt bei uns.
Ebenfalls verfügbar
Jede Seite mit Größe und Abschnitt, der Compiler, der die Datei erzeugt hat, und die Angaben zum ITSS-Verzeichnis. Um die Dateien herauszuholen, statt sie zu lesen, nehmen Sie den CHM-Extraktor.
Datenschutz
Die Hilfedatei wird im Browser geöffnet und nie hochgeladen.
Tiny Online Tools







