読者です 読者をやめる 読者になる 読者になる

Mojo::DOMの の扱い

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);   # -> 

この件まで、 は単なるスペースだとずっと思っていた。