From robin at robinclarke.net Mon Feb 6 22:40:55 2012 From: robin at robinclarke.net (Robin Clarke) Date: Tue, 07 Feb 2012 07:40:55 +0100 Subject: [Munich-pm] Termin und Vortraege fuer Februar In-Reply-To: References: <4F199488.7020705@robinclarke.net> <4F1D279B.4060307@robinclarke.net> Message-ID: <4F30C777.3010009@robinclarke.net> Zur Erinnerung - Heute Abend um 19:00 gibt's Perl Vortraege bei Exelution in der Sandstrasse 33! Wer sich noch nicht angemeldet hat, bitte hier eintragen: http://www.doodle.com/75ge2vvyn4hnvi3e Wer Pizza und Bier dabei haben will, bitte noch bei mir bestellen - ich werde Bier vom Supermarkt nebenan hohlen, und Pizza bestellen (hat wer eine Empfehlung von wo? Sonst wird's Dominos). Alles ausser Bier und Pizza muesst ihr selber mitbringen! Bestellungen habe ich schon: David: 2 Bier Andreas: 1 x Salami Daniel: 1 x Salami + 2 Bier Gabi: 1 x 4 Jahreszeiten oder aehnlich + 3 Bier -- Best winds, -Robin- ~:) # My Github repository with mostly perl code # https://github.com/robin13 -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 302 bytes Desc: OpenPGP digital signature URL: From helling at lmu.de Tue Feb 7 00:33:11 2012 From: helling at lmu.de (Robert C. Helling) Date: Tue, 7 Feb 2012 09:33:11 +0100 (CET) Subject: [Munich-pm] Termin und Vortraege fuer Februar In-Reply-To: <4F30C777.3010009@robinclarke.net> References: <4F199488.7020705@robinclarke.net> <4F1D279B.4060307@robinclarke.net> <4F30C777.3010009@robinclarke.net> Message-ID: On Tue, 7 Feb 2012, Robin Clarke wrote: Robin, > Zur Erinnerung - Heute Abend um 19:00 gibt's Perl Vortraege bei > Exelution in der Sandstrasse 33! > > Wer sich noch nicht angemeldet hat, bitte hier eintragen: > http://www.doodle.com/75ge2vvyn4hnvi3e habe ich grade gemacht. > > Wer Pizza und Bier dabei haben will, bitte noch bei mir bestellen - ich > werde Bier vom Supermarkt nebenan hohlen, und Pizza bestellen (hat wer > eine Empfehlung von wo? Sonst wird's Dominos). Alles ausser Bier und > Pizza muesst ihr selber mitbringen! > > Bestellungen habe ich schon: > David: 2 Bier > Andreas: 1 x Salami > Daniel: 1 x Salami + 2 Bier > Gabi: 1 x 4 Jahreszeiten oder aehnlich + 3 Bier Ich mag sehr gerne die Pizza von "Pizza Roberto" in der Schellingstrasse: http://www.pizza-roberto.de/ Da ich da um die Ecke wohne, wuerde ich auch mich bereit erklaeren, da vorbei zu fahren und die Pizzen abzuholen, wenn Du sie zu 18:50h bestellst (spart glaube ich 30% beim Preis). Sag bescheid, wenn ich das machen soll. In jedem Fall haette ich gerne zwei Bier und eine Pizza mit Spinat und Gorgonzola oder so aehnlich ('Gorgonzola' bei Roberto). Viele Gruesse Robert -- .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oO Robert C. Helling Elite Master Course Theoretical and Mathematical Physics Scientific Coordinator Ludwig Maximilians Universitaet Muenchen, Dept. Physik print "Just another Phone: +49 89 2180-4523 Theresienstr. 39, rm. B339 stupid .sig\n"; http://www.atdotde.de From stefan.bauer at cubewerk.de Tue Feb 14 02:28:09 2012 From: stefan.bauer at cubewerk.de (=?utf-8?Q?Stefan_Bauer?=) Date: Tue, 14 Feb 2012 11:28:09 +0100 Subject: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source Message-ID: Liebe Mongers, ich nutze XML::RSS::Parser::Lite um RSS-Feeds zu parsen. Einer der RSS-Feeds macht jedoch Probleme und mein Skript meldet junk '' before XML element beim Parsen der Datei. Das Problem sind Whitespaces vor in der Datei. Hier die Quelle: http://rss.jobsearch.monster.com/rssquery.ashx?rad_units=km&lv=11&lv=12&cy=de&indid=77&pp=15&jt=3&tm=0&sort=rv.di.dt&occ=660.11996&occ=660.11774&occ=660.11754&occ=660.11772&occ=660.11787&occ=660.11847&occ=660.11848&occ=660.11969&occ=660.11970&occ=660.11904&occ=660.11882&occ=660.11979&occ=660.11987&occ=660.12005&baseurl=stellenanzeige.monster.de Verletzt jetzt die Seite den RSS/XML-Standard mit dem Whitespace oder ist XML::RSS::Parser::Lite zu strikt? ?ber Hilfe dankbar. Stefan From Harald.Joerg at arcor.de Tue Feb 14 16:39:14 2012 From: Harald.Joerg at arcor.de (Harald =?utf-8?Q?J=C3=B6rg?=) Date: Wed, 15 Feb 2012 01:39:14 +0100 Subject: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source In-Reply-To: (Stefan Bauer's message of "Tue, 14 Feb 2012 11:28:09 +0100") References: Message-ID: <87pqdhvsjx.fsf@arcor.de> Hallo Stefan, Du schreibst: > ich nutze XML::RSS::Parser::Lite um RSS-Feeds zu parsen. > > Einer der RSS-Feeds macht jedoch Probleme und mein Skript meldet > > junk '' before XML element beim Parsen der Datei. Soweit kann ich das reproduzieren. Aaaber: > Das Problem sind Whitespaces vor in der Datei.... Wie kommst Du denn auf dieses schmale Brett? Diese Diagnose erscheint mir sehr verwegen. > ... Hier die Quelle: > http://rss.jobsearch.monster.com/rssquery.ashx?rad_units=km&lv=11&lv=12&cy=de&indid=77&pp=15&jt=3&tm=0&sort=rv.di.dt&occ=660.11996&occ=660.11774&occ=660.11754&occ=660.11772&occ=660.11787&occ=660.11847&occ=660.11848&occ=660.11969&occ=660.11970&occ=660.11904&occ=660.11882&occ=660.11979&occ=660.11987&occ=660.12005&baseurl=stellenanzeige.monster.de > > Verletzt jetzt die Seite den RSS/XML-Standard mit dem Whitespace oder ist XML::RSS::Parser::Lite zu strikt? Die RSS-Seite ist korrekt, der Parser stolpert. Der junk, den Du siehst, ist n?mlich tats?chlich *vor* dem ersten Element, und es handelt sich dabei um die BOM (Byte Order Mark), oder hex EF BB BF. UTF-8 darf sowas mitbringen, weil's eben Unicode ist, obwohl man es bei UTF-8 (im Unterschied zu UTF-16) gar nicht braucht. Perl an sich macht das richtig, drum siehst Du rein gar nichts, wenn Du den RSS-Text mit print ausgibst. Wenn Du das Ding mit use bytes einliest und die ersten drei Bytes schlachtest, dann stirbt der Parser nicht mehr. Wenn Du das Ding mit binmode UTF8 einliest, dann musst Du nur den ersten Character (hier nicht Byte!) schlachten. Der sieht n?mlich so aus: DB<16> printf("%X",ord(substr($xml,0,1))) FEFF ...und FEFF ist eben der Unicode-Codepoint der BOM. Ein robuster Code k?nnte so aussehen: 1) den Content-Type checken: bei text/xml ist UTF-8 default 2) falls ja: mit binmode $fh, ':UTF8' einlesen 3) danach mit $rss =~ s/^\x{FEFF}// die BOM schlachten, falls vorhanden 4) ...und dann erst an den Parser verf?ttern. -- Cheers, haj From stefan.bauer at cubewerk.de Tue Feb 14 23:42:06 2012 From: stefan.bauer at cubewerk.de (=?utf-8?Q?Stefan_Bauer?=) Date: Wed, 15 Feb 2012 08:42:06 +0100 Subject: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source In-Reply-To: <87pqdhvsjx.fsf@arcor.de> References: <87pqdhvsjx.fsf@arcor.de> Message-ID: -----Urspr?ngliche Nachricht----- Von: Harald.Joerg at arcor.de Gesendet: Mi 15.02.2012 01:39 Betreff: Re: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source An: Stefan Bauer ; CC: Perl Mongers, MUC ; > Die RSS-Seite ist korrekt, der Parser stolpert. Der junk, den Du > siehst, ist n?mlich tats?chlich *vor* dem ersten Element, und es handelt > sich dabei um die BOM (Byte Order Mark), oder hex EF BB BF. UTF-8 darf > sowas mitbringen, weil's eben Unicode ist, obwohl man es bei UTF-8 (im > Unterschied zu UTF-16) gar nicht braucht. Perl an sich macht das > richtig, drum siehst Du rein gar nichts, wenn Du den RSS-Text mit print > ausgibst. > > Wenn Du das Ding mit use bytes einliest und die ersten drei Bytes > schlachtest, dann stirbt der Parser nicht mehr. > > Wenn Du das Ding mit binmode UTF8 einliest, dann musst Du nur den ersten > Character (hier nicht Byte!) schlachten. Der sieht n?mlich so aus: > > DB<16> printf("%X",ord(substr($xml,0,1))) > FEFF > > ...und FEFF ist eben der Unicode-Codepoint der BOM. > Ein robuster Code k?nnte so aussehen: > > 1) den Content-Type checken: bei text/xml ist UTF-8 default > 2) falls ja: mit binmode $fh, ':UTF8' einlesen > 3) danach mit $rss =~ s/^\x{FEFF}// die BOM schlachten, > falls vorhanden > 4) ...und dann erst an den Parser verf?ttern. Hallo Harald, danke f?r die ?u?erst ausf?hrliche Erkl?rung. Auf eine Antwort wartend habe ich folgenden Workaround genutzt gestern: getstore("http://rss.jobsearch.monster.com/rssquery.ashx?rad_units=km&lv=11&lv=12&cy=de&indid=77&pp=15&jt=3&tm=0&sort=rv.di.dt&occ=660.11996&occ=660.11774&occ=660.11754&occ=660.11772&occ=660.11787&occ=660.11847&occ=660.11848&occ=660.11969&occ=660.11970&occ=660.11904&occ=660.11882&occ=660.11979&occ=660.11987&occ=660.12005&baseurl=stellenanzeige.monster.de%27",$rss_datei); $xml = get("file://$rss_datei"); Ich frage mich jetzt, warum durch diese Methode die BOM verschwunden ist? Stefan From stefan.bauer at cubewerk.de Wed Feb 15 00:55:36 2012 From: stefan.bauer at cubewerk.de (=?utf-8?Q?Stefan_Bauer?=) Date: Wed, 15 Feb 2012 09:55:36 +0100 Subject: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source In-Reply-To: <87bop0a3ef.fsf@arcor.de> References: <87bop0a3ef.fsf@arcor.de> Message-ID: -----Urspr?ngliche Nachricht----- Von: Harald.Joerg at arcor.de Gesendet: Mi 15.02.2012 09:48 Betreff: Re: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source An: Stefan Bauer ; > Das ist allerdings interessant. Na denn mal los. perl -d -e 1... > > Guckst Du HTTP/Message.pm, Zeile 401ff: > > if ($is_xml) { > # Get rid of the XML encoding declaration if present > $$content_ref =~ s/^\x{FEFF}//; > if ($$content_ref =~ /^(\s*<\?xml[^\x00]*?\?>)/) { > substr($$content_ref, 0, length($1)) =~ s/\sencoding\s*=\s*(["']).*?\1//; > } > } > > Das kommt mir ja fast bekannt vor aus meiner vorigen Antwort. > Offensichtlich hat LWP durchaus die Absicht, eine BOM wegzufressen, wenn > er eine sieht. Wenn Du aus Datei liest, dann funktioniert das auch. > Nur: Was ist der Unterschied zu get via HTTP? > > Die b?se Abfrage ist ein paar Zeilen dr?ber, Zeile 359: > > if ($self->content_is_text || (my $is_xml = $self->content_is_xml)) { > > Und da haben wir den ?belt?ter. Die *Datei* wird bin?r eingelesen, es > gibt keinen Content-Type, $self->content_is_text returniert false und > $self->content_is_xml returniert (richtigerweise) true. $is_xml wird > versorgt. > > ?bers Netz dagegen kommt ein Content-Type text/xml im HTTP-Header. Und > schwupps, $self->content_is_text wird true. Damit nimmt Perl die > Abk?rzung und weist $is_xml gar nicht erst zu: Die Abfrage in Zeile 401 > geht daneben. > > Bei Licht betrachtet halte ich das f?r einen Fehler in HTTP/Message.pm, > den Du da aufgesp?rt hast. Ich schau' mal, ob das schon mal auf der > Mailing Liste diskutiert wurde. Danke f?r die Analyse. Mich w?rde das Ergebnis dann nat?rlich auch interessieren. Mein Parsing klappt jedenfalls schon und ich bin gl?cklich :) Stefan From Harald.Joerg at arcor.de Wed Feb 15 01:46:39 2012 From: Harald.Joerg at arcor.de (Harald =?utf-8?Q?J=C3=B6rg?=) Date: Wed, 15 Feb 2012 10:46:39 +0100 Subject: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source In-Reply-To: (Stefan Bauer's message of "Wed, 15 Feb 2012 09:55:36 +0100") References: <87bop0a3ef.fsf@arcor.de> Message-ID: <87fwec8m4g.fsf@arcor.de> Stefan Bauer schreibt: > Danke f?r die Analyse. Mich w?rde das Ergebnis dann nat?rlich auch interessieren. Ok, here you are: Der erste Fehler liegt beim Web Server. In der Spezifikation des HTTP-Protkolls (RFC 2616) steht im Abschnitt 3.7.1: When no explicit charset parameter is provided by the sender, media subtypes of the "text" type are defined to have a default charset value of "ISO-8859-1" when received via HTTP. Data in character sets other than "ISO-8859-1" or its subsets MUST be labeled with an appropriate charset value. See section 3.4.1 for compatibility problems. Wir haben hier einen Content Type text/xml ?ber HTTP geschickt bekommen, daher muss HTTP/Message.pm "standardkonform" annehmen, dass der Text im Charset ISO-8859-1 codiert ist. Bei ISO-8859-1 gibt's keine BOM, also darf er auch nix abschneiden. Der Web-Server m?sste seinen Header also so schreiben: Content-Type: text/xml; charset=utf-8 ---------------------------------------------------------------------- Dazu die Vermutung: HTTP/Message.pm macht's trotzdem falsch. Ich hab' grade nicht die Zeit, zu testen, was denn passiert, wenn ein Server den Header richtig versorgt. Ich *vermute* aber anhand des Codes in Message.pm, dass auch bei richtigem Content-Type Header die BOM dranbleibt. Aber ohne echte Tests geh' ich mit sowas nicht auf die libwww-Mailingliste. -- Cheers, haj