1

解析したいxmlファイルがあります:

<?xml version="1.0" encoding="UTF-8" ?>
<tag>û</tag>

これは、Firefox によって完全に解析されます。しかし、XML::Simple はいくつかのデータを破壊します。次のようなperlプログラムがあります。

my $content = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
$content .= "<tag>\x{c3}\x{bb}</tag>\n";

print "input:\n$content\n";

my $xml = new XML::Simple;
my $data = $xml->XMLin($content, KeepRoot => 1);

print "data:\n";
print Dumper $data;

そして得る:

input:
<?xml version="1.0" encoding="UTF-8" ?>
<tag>û</tag>

data:
$VAR1 = {
          'tag' => "\x{fb}"
        };

それは私が期待したものではないようです。エンコードの問題があると思います。私は何か間違ったことをしていますか?

UPD: XMLin は (入力として) utf-8 でテキストを返したと思いました。追加したばかり

encode_utf8($data->{'tag'});

そしてそれは働いた

4

2 に答える 2

3

XML::Simple は気まぐれです。

Encode::decode('UTF-8',$content) を呼び出すと、UTF-8 がネイティブになります。

これを行う:

my $content_utf8 = "whatevér";
my $xml = XMLin($content_utf8);
my $item_utf8 = Encode::encode('UTF-8',$xml->{'item'});

この種のものも機能しますが、二重エンコーディングでは危険です:

my $content_utf8 = "whatevér";
my $double_encoded_utf8 = Encode::encode('UTF-8',$content_utf8);
my $xml = XMLin($double_encoded_utf8);
my $item_utf8 = $xml->{'item'};
于 2012-06-13T22:15:39.260 に答える
0

16 進数の FB (dec 251) は、「û」文字の ASCII コードです。データ構造で得られると予想していたものについて詳しく説明してください。得たものが「破損している」と結論付けましたか?

于 2010-10-23T13:48:24.727 に答える