Hallo, hat jemand von Euch schon mal XML_SetUnknownEncodingHandler() mit Expat eingesetzt? Ich fand keine Beispiele dazu und finde die Dokumentation zu diesem Punkt ziemlich bescheiden (ich verstehe sie nicht). Viele Grüße Manfred
Hallo, Am Wed, 07 Dec 2005, Manfred Rebentisch schrieb:
Hallo, hat jemand von Euch schon mal XML_SetUnknownEncodingHandler() mit Expat eingesetzt?
Ich fand keine Beispiele dazu und finde die Dokumentation zu diesem Punkt ziemlich bescheiden (ich verstehe sie nicht).
Schreibe doch mal, _was_ du nicht verstehst. file:///usr/{,/local}/share/doc/packages/expat/reference.html#XML_SetUnknownEncodingHandler Ansonsten: welche Version(en) der libexpat? -dnh -- Ich brauchte ganz, ganz dringend einen Beweis, das ich zu blöd für die einfachsten Sachen bin, z.B. Email-Forwarden. Den habe ich ja nun - Danke für die Mithilfe. BOINK. BOINK. BOINK. BOINK... Die Passwörter poste ich dann morgen. Gnaaaaa! [Ratti in suse-linux]
Hallo David, einfach ist die Antwort nicht... Am Mittwoch, 7. Dezember 2005 15:14 schrieb David Haller:
Hallo,
Am Wed, 07 Dec 2005, Manfred Rebentisch schrieb:
Hallo, hat jemand von Euch schon mal XML_SetUnknownEncodingHandler() mit Expat eingesetzt?
Ich fand keine Beispiele dazu und finde die Dokumentation zu diesem Punkt ziemlich bescheiden (ich verstehe sie nicht).
Schreibe doch mal, _was_ du nicht verstehst. siehe unten.
file:///usr/{,/local}/share/doc/packages/expat/reference.html#XML_SetUnknow nEncodingHandler
Ansonsten: welche Version(en) der libexpat?
rpm-package: expat-1.95.8-2 /usr/lib/libexpat.so.0.5.0 Ich benutze SuSE 9.2 Zunächst melde ich mit XML_SetUnknownEncodingHandler(xparser, intern_unknownencodinghandler, myObj); die Funktion intern_unknownencodinghandler() als Handler an. Dann setze ich für ein XML-Dokument das Encoding auf einen Zeichensatz, der von expat nicht unterstützt wird: XML_SetEncoding(xparser, "iso-8859-2"); static int intern_unknownencodinghandler(void* userdata, const char* name, XML_Encoding* info) { printf("info->data: %p, info->convert: %p\n", info->data, info->convert); info->data = userdata; info->convert = intern_convert; if(1) { int i; for(i=0; i < 256; i++) { printf("%d^", info->map[i]); } printf("\n"); } printf("encoding is supported\n"); return XML_STATUS_OK; } Die info-Struktur ist: typedef struct { int map[256]; void *data; int (XMLCALL *convert)(void *data, const char *s); void (XMLCALL *release)(void *data); } XML_Encoding; Beim ersten Aufruf ist data, convert und release NULL. map enthält 256 mal die "-1". Laut Doku steht -1 für ein "malformed byte" und: "If the value is -2, -3, or -4, then the byte is the beginning of a 2, 3, or 4 byte sequence respectively." Mir fehlt aber der Bezug. Zum einen weiß ich nicht, warum die Funktion nur einmal aufgerufen wird, auch wenn ich convert auf eine eigene Funktion setze und obwohl ich XML_STATUS_OK zurückgebe. Zum anderen weiß ich nicht, wie das mit der map gemeint ist. Wenn sie sich auf ein 256-int-Array in data bezieht, muß ich die Werte in map setzen oder lesen? Muß ich irgendwas mit convert machen, also eine eigene Funktion einsetzen? Unter welchen Umständen wird diese aufgerufen? Wie ist dann der Parameter "s" zu interpretieren? Ich habe dann info->data so interpretiert, daß man dort einen eigenen Pointer unterbringen kann, der dann als void*-Pointer mit der convert-Funktion wieder auftaucht. Habe die convert-Funktion so geschrieben: static int intern_convert(void* data, const char* s) { printf("intern_convert called with <s>: %s\n", s); return 0xC2A0; /* irgendein Unicode-Zeichen */ } Der Aufruf von XML_ParseBuffer hat dann zur Folge: XML_ParseBuffer returns: 18, [unknown encoding] on row=1 and col=0 (index -1) intern_convert wird garnicht aufgerufen. Viele Grüße Manfred
Ich muß noch hinzufügen (zur letzten Mail), daß die Funktion intern_unknownencodinghandler() aufgerufen wird und name: [iso-8859-2], info->data: (nil), info->convert: (nil) -1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^-1^ encoding is supported ausgibt. (Parameter name hatte ich noch hinzugefügt). Grüße Manfred
participants (2)
-
David Haller
-
Manfred Rebentisch