プロが教えるわが家の防犯対策術!

あるサーバにあるxmlファイルの内容を取得する為に

use LWP::Simple;
$url = "http://***/***.xml"; #取得するXMLファイル
$text = get($url);

以上の様な方法を用いたのですが、目的のxmlファイルを取得する際のみ、$textに格納される内容が『1文字ごとに半角スペースのようなもので区切られている』という意図しないものになってしまいます。
他のxmlファイルは問題なく取得できるのですが・・・・・・何か特別な方法が必要なのでしょうか。

A 回答 (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;
    • good
    • 0
この回答へのお礼

解りやすい例とご説明ありがとうございました。
Jcodeの適用に多少躓いたものの、無事成功致しました。

未だにJcode.pmが利用できないのは困り者ですね(^^;

お礼日時:2005/04/02 09:24

問題の出る


$url = "http://***/***.xml
のリンク先は書くとまずいんでしょうか?
まあ、他人様のサーバならここに書くのは少し問題なのかな?どうでしょう??

そのリンク先で問題がでるかこちらでも確認できれば、誰かアドバイスをしてくれると思います。

No1の方の言われる通りかもしれませんし、その他サーバの吐き出しに問題があるかもしれませんし。

お力になれなくてすみません。

この回答への補足

投稿の際に悩んではいたのですが
とりあえず伏せて投稿させていただきました。
アドレスを提示することでその管理者に対して害が生じる可能性も否定できなかったもので・・・。

御指摘ありがとうございます。

補足日時:2005/03/28 11:10
    • good
    • 0

エンコードが、UTF-16なファイルなのでは。


正当なxmlファイルなら、xml宣言でエンコーディングが判断できると思います。

参考URL:http://altba.com/bakera/hatomaru.aspx/glossary/0 …

この回答への補足

御回答ありがとうございます。
確かにUTF-16で記述されたものでした。

エンコーディングのことなのですが
その方法を御教示して戴けないでしょうか。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1257793
こちらで「UTF-16への変換」は回答されているのですが・・・。

補足日時:2005/03/28 11:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!