ã¡ãã㨠PREFERRED_PARSER ãæå®ãããã¨ã
$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
ãªã«ãããã2005å¹´ãããã«ã¿ãæãã®è©±é¡ã§æç¸®ãªã®ã§ããã
XML::SAX ãã¤ã³ã¹ãã¼ã«ãããããããªã XML::Simple ã使ã£ã¦ãã³ã¼ãã
Cannot decode string with wide characters
ã£ã¦è¨ã£ã¦ã³ã±å§ãããããããã¢ããªã±ã¼ã·ã§ã³ãåèµ·åãã¦ã¿ãããªããåç¾ããªãã
çµè«ã¨ãã¦ã¯ãXML::SAX::PurePerl ã使ãããç¶æ ã§ãXMLin() ã« utf8 flagged ãªæååãæ¸¡ãã¨æ»ã¬ã
use XML::Simple; use utf8; $XML::Simple::PREFERRED_PARSER = 'XML::SAX::PurePerl'; $xml = "<xml>ããã</xml>"; XMLin($xml);
åèµ·åãããåç¾ããªãã£ãã®ã¯ãXML::SAX ãå ¥ããå¾ã« XML::LibXML ãã¤ã³ã¹ãã¼ã«ãã¦ãã¦ãXML::LibXML ãå ¥ã㨠XML::LibXML::SAX ã使ããã (PurePerl ã¯ä½¿ãããªããªã) ããã
ã¨ãããã¨ã§ãXML::Simple ã使ãå ´åã¯æç¤ºçã« PREFERRED_PARSER ãæå®ãã¦ãã£ã¦ãæãã¬æåãèµ·ããªãããã«ãã¾ãããã
[追è¨]
ãããããXML::Simple ã«ã¯ bytes ã弿°ã¨ãã¦æ¸¡ãã¹ããªããããªãã
http://d.hatena.ne.jp/tokuhirom/20090731/1249001060
ããã¯ã¾ã£ããåæã§ããSAX::PurePerl 以å¤ã§ã¯ flagged ãªã®ã渡ãã¦ãåé¡ãªãã£ãã®ã§ãæ°ãã¤ãã¾ããã§ããã
èªåçã« LibXML ã使ãããã®ã¯ã
XML::SAX ã®ä»æ§çã«ã¯
http://iandeth.dyndns.org/mt/ian/archives/000589.htmlæç¤ºçãªæå®ãç¡ãéããæå¾ã«ç°å¢ã«ã¤ã³ã¹ãã¼ã«ãããSAXãã¼ãµã¼ãå©ç¨ãã
ã¨ãããã¨ã®ããã§ãä»åã®èªåã®ç°å¢ã®ããã«
ã®é åºã§ã¤ã³ã¹ãã¼ã«ããã¨ãå®éã«ä½¿ããããã¼ãµã¯
- XML::Simple ãå ¥ããæç¹ => XML::Parser
- XML::SAX ãå ¥ããæç¹ => XML::SAX::PurePerl
- XML::LibXML ãå ¥ããæç¹ => XML::LibXML::SAX
ã¨å¤ãã£ã¦ããã¾ãã
ãããã¢ããªã±ã¼ã·ã§ã³ (mod_perl ä¸ã® web ã¢ããª) ã¯ãXML::SAX ã¤ã³ã¹ãã¼ã«åã¾ã§ã¯ XML::Parser ã使ã£ã¦ãã¦ããããåããã¾ã¾ XML::SAX ãå ¥ããã PurePerl ã使ããã¦æ»ãã ãããã«æ°ãã¤ãã¦åç¾ãããã¨ã³ã¼ããæ¸ããã¨ãã«ã¯æ¢ã« XML::LibXML ãå ¥ã£ã¦ãã¦ãPurePerl ã使ãããªãããåç¾ããªã! ã¨ããæç³»åã
ã¾ããä¸çªæå¾ã«ã¤ã³ã¹ãã¼ã«ããã SAX ãã¼ãµã使ããã¨ãã仿§ã¯çµæ§ãããããã¦ãLibXML ãå ¥ããå¾ã« force install XML::SAX ãããã¨ãXML::SAX::PurePerl ãããã©ã«ãã«å¾©å¸°ãã¦ãã¾ãã¾ãã
æ°ãã¤ããªããã¡ã« PurePerl ã使ããã¦å¦ã«é ããªã£ããã¿ãããªãã¨ãåé¿ããããã«ããPREFERRED_PARSER ãæç¤ºããã»ããå®å ¨ãã¨ã
[追è¨2]
XML::SAX::PurePerl ã flagged ã§æ»ã¬ã®ã¯ RT ã«ãç»é²ããã¦ã¾ããã#19367: parse_string() crashes when handed UTF-8 combining characters