行き詰まってしまったので教えて下さい。
<やりたいこと>
とある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で質問しましょう!
似たような質問が見つかりました
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- WordPress(ワードプレス) ワードプレスにて .xmlファイルの使い方をご存知の方、よろしくお願いいたします。 2 2022/09/30 00:55
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- XML Windowsで見かけるxmlファイルってどういうものですか? 1 2022/06/03 14:57
- 数学 この数学問題、スマートに解く方法を教えてください。 3 2023/01/26 23:17
- XML iPhoneでXMLファイルを開くにはどうしたら良いのでしょうか? 1 2022/09/05 18:00
- アプリ おすすめのパスワード管理アプリを教えてください。(iOSとWindows対応) 4 2023/01/19 02:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perl utf8上でshiftjisをデコード
-
VBAコードを張り付け後のエクセ...
-
バッチファイルの作り方(CSV→...
-
batファイルでrenameができませ...
-
close()で例外が投げられる理由
-
vba dir の相対パス
-
MATLABのm-fileについて
-
文字列をカウントする方法
-
至急お願いします。C言語で.img...
-
一定時間が経過したフォルダの削除
-
JavaでCSVファイルを高速に読む...
-
画像アップロード機能を追加し...
-
csvファイルの横方向への改行に...
-
Perlで特定行から特定行までを...
-
【エクセル】改行無しテキスト...
-
perlのエディタでおすすめを教...
-
フォルダ内のファイルを全て開...
-
PICでFatFsでオープンした内容...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Perl cgiの文字化けを直したい ...
-
HTTP::Request::Common qw(POST...
-
utf-8のCSVをshift_jisに変換し...
-
ファイル出力をUTF8Nではなくて...
-
[Perl]Shift-JISのXMLを解析する場
-
perlのmysqlで文字化けをする、...
-
文字を一文字ずつ区切りたい
-
perlでuse utf8でsjisのファイ...
-
Perl utf8上でshiftjisをデコード
-
does not map to shiftjis は解...
-
DBIモジュールと Perl5.8
-
消費税の計算で 税込価格から...
-
Data::Dumper;でダンプ後表示し...
-
Perl UTF8で出力
-
perlをwindows環境でshift-jis...
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
-
VBAでCSVファイルの特定行を書...
-
DOSコマンドで、標準出力を出力...
-
ExcelをCSV書き出す場合のシー...
おすすめ情報