in reply to XML::Simple and ISO-8859-1 encoding buggy?

XML::Simple's design is extremely problematic. So much so that the module's own documentation tells you not to use it. wtf are you doing using this module?!


XML::Simple and ISO-8859-1 encoding buggy?

Decoding is handled by the XML parser. You didn't specify which XML parser you are using. (No, XML::Simple is not an XML parser.) XML::Parser is commonly used by XML::Simple, and XML::Parser handles iso-8859-1 just fine.

use 5.014; use warnings; use XML::Simple qw( :strict ); # Taken from OP. use File::Slurper qw( read_binary ); my $xml = read_binary($ARGV[0]); # Make sure we know which parser is being used. local $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; # Taken from OP. my $doc = XMLin($xml, ForceArray => 1,KeyAttr => [ ]); say sprintf "%vX", $doc;
$ perl a.pl a_latin1.xml E9 $ perl a.pl a_utf8.xml E9

On a terminal execting UTF-8:

$ cat a_utf8.xml
<?xml version="1.0"?><root></root>

$cat a_latin1.xml | iconv -f iso-8859-1
<?xml version="1.0" encoding="ISO-8859-1"?><root></root>

Seeking work! You can reach me at ikegami@adaelis.com

Replies are listed 'Best First'.
Re^2: XML::Simple and ISO-8859-1 encoding buggy?
by derion (Sexton) on May 28, 2021 at 07:54 UTC

    Wow, thank you very much, that was exactly the answer to the question.

    wtf are you doing using this module?!

    You are right, I started using it more than ten years ago and did not really look at the warning, constant amateur behaviour.

    No, XML::Simple is not an XML parser.

    Something I did not realize

    local $XML::Simple::PREFERRED_PARSER = 'XML::Parser';

    Defining the Parser leads to the expected behaviour and solves the task.

    I will have to try to move on to something else and will start with XML::Rules. Nevertheless the not recommended module works as it should with the above.

      Nevertheless the not recommended module works as it should with the above.

      You can "never" be sure that an XML::Simple solution works. That's the problem with it.

      Seeking work! You can reach me at ikegami@adaelis.com