- 締切済み
[Perl]XML::SimpleでSJIS
Windows7、ActivePerl v5.24.1を使っています。 use XML::Simple; use Data::Dumper; my $data = XMLin('test.xml'); print Dumper($data); というコードで、以下のXMLファイルを読み込むと、 <?xml version="1.0" encoding="shift_jis"?> <root> <top id="1234"> <second>値</second> <third> <fourth>1234</fourth> <fifth>myvalue</fifth> </third> </top> </root> Couldn't open encmap shift_jis.enc: No such file or directory at C:/Perl/lib/XML/Parser.pm line 187. XML::Simple called at read_xml_test.pl line 10. というエラーがでます。 ググると、以下のサイトで解決できたという記事がヒットしますが このサイトはもう存在しません。 Perl XMLでencoding=’Shift_JIS’や’euc-jp’を使う http://homepage3.nifty.com/hippo2000/perltips/xml/xmlenc.htm なにかコード間のマップファイルと思われますが、 どなたかお持ちじゃないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kumoz
- ベストアンサー率64% (120/185)
私も探してみましたが、今となっては無理そうですね? > しかし、ご提示のスクリプトでコード変換をしてXMLinに渡す方は同じエラーがでます。 XML::Simple のマニュアル (http://web.petefinnigan.com/XML-Simple.txt) では、XMLin は「ファイルまたは文字列」を受け付けるとありますが、変数に入った文字列は不可なのかもしれません。ファイルが UTF-8 であれば OK のようですので、1つの一時ファイルを使い回すくらいしかなさそうです? use Encode; $file = encode "utf-8", decode("shift_jis", $file); $file =~ s/shift_jis/utf-8/; open OUT, ">temp.xml" or die; print OUT $file; close OUT;
- kumoz
- ベストアンサー率64% (120/185)
下記のような記事がありますが、Windows 環境では難しいかもしれません。 http://d.hatena.ne.jp/end0tknr/20080724/1216906738 事前に文字コードと宣言行を utf-8 に変更するとどうなりますか? use Encode; $file = encode "utf-8", decode("shift_jis", $file); $file =~ s/shift_jis/utf-8/;
お礼
ご回答ありがとうございます。 >下記のような記事がありますが、 >http://d.hatena.ne.jp/end0tknr/20080724/1216906738 この記事も見ていましたが、同じサイト(hippo2000)からダウンロードが必要なので... > 事前に文字コードと宣言行を utf-8 に変更するとどうなりますか? ファイルそのものに対してutf-8に変更した場合はエラーは回避できました。 しかし、ご提示のスクリプトでコード変換をしてXMLinに渡す方は同じエラーがでます。 対象のファイルが大量にあるのと、Perlで処理をしたのち、SJISのXMLに戻したいという事情もあり、スクリプト内で一時的にutf-8扱いは構わないのですが、入出力時のコードはSJISがいいのです。 何かいい方法はないでしょうか?