行き詰まってしまったので教えて下さい。
<やりたいこと>
とあるAPIからXMLファイルを取得し、解析して出力する、ということをやっているのですが、元のXMLがShift-JISでエンコーディングされており、これをUTF-8に変換して出力しようとしています。
<問題>
XMLを取得して解析、取り出したいパラメータが出力できるようにはなったのですが、文字のエンコーディングが上手く行っていないためか、文字化けしてしまいます。
<元のXML>
<?xml version="1.0" encoding="Shift_JIS"?>
<test>
<prod count=3>
<record>
<code>アイウエ</code>
</record>
<record>
<code>カキクケ-</code>
</record>
<record>
<code>ABC</code>
</record>
</prod>
</test>
<XML解析用のコード>
#!usr/bin/perl
use utf8;
use Encode qw/ from_to encode decode /;
use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;
use LWP::UserAgent;
use XML::Simple;
use Data::Dumper;
#--XML取得部分省略
#--XMLはgetで$xmlに格納
$from = guess_encoding($xml)->name;
&from_to($xml,$from,"utf8");
$XML::Simple::PREFFERRED_PARSER = 'XML::SAX::PurePerl';
$xs = new XML::Simple();
$ref = $xs->XMLin($xml);
$xml =~ s/<\?.*\?>//;
for($i=0;$i<=$#{$ref->{'test'}->{'prod'}->{'record'}};$i++){
$name = $ref->{'test'}->{'prod'}->{'record'}[$i]->{'code'};
$name = encode('utf-8',$name);
print "$i : $name\n";
}
<結果>
黒ダイヤに?文字で文字化けして出力される。
どなたか原因がお分かりになりますでしょうか。
よろしくお願いいたします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
ん~, 手元だと <test>, </test> の両タグが落ちてる. なんでだろ....
さておき, from_to は何のため?
あと, 実は元のXML がおかしい気がする.
ありがとうございます。
not well formedが出てしまうので、元のXMLを疑ってみます。
一応
XML::Simple::PREFEERED_PARSER = `XML::SAX::PurePerl`
で上記エラーの回避は可能ですが、今度は途中から文字化けするという謎の現象が起こってしまいます。
もう少し調べてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl UTF8で出力
-
教えて!perlから.exeファイル...
-
Perlで特定行から特定行までを...
-
VBAでCSVファイルの特定行を書...
-
VBAでCSVファイルを途中行まで...
-
awkスクリプトでダブルクォーテ...
-
sprintfについて
-
C言語で特定の行を抽出する方法...
-
JavaでCSVファイルを高速に読む...
-
VBAで巨大なファイルの途中から...
-
バッチファイルの作り方(CSV→...
-
file_exists関数について
-
perlで先頭の数値をみて昇順に...
-
MySQLにバイナリデータを正常に...
-
csvファイル改行コードの置換に...
-
MATLAB グローバル変数の宣言
-
perlで容量の大きいCSVファイル...
-
fopenでディレクトリ内の全ファ...
-
ファイル操作について、テキス...
-
perlでcsvファイルを読む(ダブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
perlをwindows環境でshift-jis...
-
Perl utf8上でshiftjisをデコード
-
文字を一文字ずつ区切りたい
-
【エラー】Unrecognized character
-
XML::RSS文字コード統一の仕方...
-
Perlの文字コードを意識したフ...
-
Perl:Unicodeプロパティ作れない
-
大容量テキストファイルから任...
-
perl5.8.3のunicode環境で日本...
-
[Perl]Shift-JISのXMLを解析する場
-
Data::Dumper;でダンプ後表示し...
-
[perl5.8] SJISから読み込んだ~と
-
複数種類の括弧でくくられてな...
-
utf-8での日本語正規表現の書き方
-
ファイル出力をUTF8Nではなくて...
-
perlで新規ファイルを作成でき...
-
エクセルVBA コードが同じでも...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
おすすめ情報