- ベストアンサー
perlによるxmlファイルの取得
あるサーバにあるxmlファイルの内容を取得する為に use LWP::Simple; $url = "http://***/***.xml"; #取得するXMLファイル $text = get($url); 以上の様な方法を用いたのですが、目的のxmlファイルを取得する際のみ、$textに格納される内容が『1文字ごとに半角スペースのようなもので区切られている』という意図しないものになってしまいます。 他のxmlファイルは問題なく取得できるのですが・・・・・・何か特別な方法が必要なのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
UTF-16 のデコードは、Perl 5.8 以降ならば Encode.pm を使い、次のようにします。 use Encode; use Encode::Guess; : $text = decode("Guess", $text); デコードした $text は utf8 となりますから、シフトJISなどに変換する必要がある場合は次のようにして下さい。 $text = encode("sjis", decode("Guess", $text)); また、それ以前のバージョンの場合には Jcode.pm を使い、ucs2 メソッドで変換します。 ただし、ucs2 は UTF-16BE(nonBOM)に相当するため、それ以外の形式の場合は pack と unpack を使い、前もって同形式に変換しておく必要があります。 XMLの場合、BOMがなければ最初は < なので、BOMと絡めてその辺をチェックするとよいでしょう。 use Jcode; : if ($text =~ s/^\xFF\xFE// || $text =~ /^</) { $text = pack "n*", unpack "v*", $text; } else { $text =~ s/^\xFE\xFF// } $text = Jcode->new($text, "ucs2"); 変換後の $text は euc になるので、シフトJISなどに変換する必要がある場合は次のようにして下さい。 $text = Jcode->new($text, "ucs2")->sjis;
その他の回答 (2)
- omni2
- ベストアンサー率53% (33/62)
問題の出る $url = "http://***/***.xml のリンク先は書くとまずいんでしょうか? まあ、他人様のサーバならここに書くのは少し問題なのかな?どうでしょう?? そのリンク先で問題がでるかこちらでも確認できれば、誰かアドバイスをしてくれると思います。 No1の方の言われる通りかもしれませんし、その他サーバの吐き出しに問題があるかもしれませんし。 お力になれなくてすみません。
補足
投稿の際に悩んではいたのですが とりあえず伏せて投稿させていただきました。 アドレスを提示することでその管理者に対して害が生じる可能性も否定できなかったもので・・・。 御指摘ありがとうございます。
- osamuy
- ベストアンサー率42% (1231/2878)
エンコードが、UTF-16なファイルなのでは。 正当なxmlファイルなら、xml宣言でエンコーディングが判断できると思います。
補足
御回答ありがとうございます。 確かにUTF-16で記述されたものでした。 エンコーディングのことなのですが その方法を御教示して戴けないでしょうか。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1257793 こちらで「UTF-16への変換」は回答されているのですが・・・。
お礼
解りやすい例とご説明ありがとうございました。 Jcodeの適用に多少躓いたものの、無事成功致しました。 未だにJcode.pmが利用できないのは困り者ですね(^^;