Mojo::Domでパースすると、 がUnicodeのU+00A0(ノーブレークスペース)に変換される。
なのでto_xmlで出力した文字列をUTF-8以外の文字コードでエンコードすると、文字化けを起こしてしまう。
以下、再現コード。
use strict; use warnings; use Encode; use Mojo::DOM; my $text = ' '; my $dom = Mojo::DOM->new($text); my $xml = $dom->to_xml; warn unpack("H*", $xml); # -> a0 warn $xml; # -> ? warn encode_utf8($xml); # ->
この件まで、 は単なるスペースだとずっと思っていた。