http://www.perlmonks.org?node_id=998905


in reply to UTF-8 and XML::Parser

Hello.

You need "use utf8;" for literal strings to be treated as utf8 "character".

#!/usr/bin/perl use XML::Parser; use utf8; ###added $xml = "<word>Müller</word>"; $ch = sub { my ($p, $w) = @_; binmode STDOUT, ":encoding(UTF-8)"; ###added print "#$w#\n"; }; # the next commented 2 lines mean the same # and translate the output to iso-8859-1 # $p = XML::Parser->new(); $p = XML::Parser->new(ProtocolEncoding => 'UTF-8'); # this line do the right job, but why?? #$p = XML::Parser->new(ProtocolEncoding => 'ISO-8859-1'); $p->setHandlers('Char' => $ch); $p->parse($xml);
From perluniintro ...

...if your Perl script itself is encoded in UTF-8, you can use UTF-8 in your identifier names, and in string and regular expression literals, by saying use utf8. This is not the default because scripts with legacy 8-bit data in them would break.

regards.