Perl XMLでencoding='Shift_JIS'や'euc-jp'を使う

by Hippo2000(2000/7/12)

Perlを使って日本語の入ったXMLファイルを処理しようとするさい、これまではencodingをどうするかというのが1つの悩みでした。
私は好きなマッピング・ファイルを"Shift_JIS"、"euc-jp"などのためのマッピング・ファイルにするためのスクリプトmkenc.plを作成しました。

何はともあれという形で公開します。ご意見などありましたらメールをいただきたいと思います。


目次

1. はじめに
2. ファイルとその内容
3. 使い方


1. 背景

村田真さんの"Japanese_Encoding.msg"にもあるように、現バージョンのXML::ParserとXML::Encodingには"Shift_JIS"や"euc-jp"という文字セットためのマッピング・ファイルは入っていません。

 このために、XML::Parserを利用する人は"Shift_JIS"や"euc-jp"とを使っているXMLファイルのエンコーディングを変更しなければなりませんでした。これはかなり面倒です。

そこで私は好きなマッピング・ファイルを"Shift_JIS"、"euc-jp"などのためのマッピング・ファイルにするためのスクリプトmkenc.plを作成しました。

またメールで村田真さんからも見ていただいて、"Japanese_Encoding.msg"の日本語訳も作成しました。

2. ファイルとその内容

マッピングファイルを作成するスクリプトなどをまとめたファイルを用意しました。

圧縮形式は2つ種類あります。

Encod.lzh(LZH形式)Encod.tar.gz(zipped TAR形式)

この中には以下のファイルが入っています。

MANIFEST :ファイル一覧(英語)
MANIFEST_J :ファイル一覧(日本語)

Japanese_Encodings.msg : 今回、村田真さんからの「注」を加えました
Japanese_Encodings_J.msg : Japanese_Encodings.msgを翻訳したもの

mkenc/
mkenc.pl : 他のマッピング・ファイルからマッピング・ファイルを作成するスクリプト
readme.txt : mkenc.plのreadme(日本語)
readme_e.txt: mkenc.plのreadme(英語)
example/
euc-jp.enc: x-euc-jp-unicode.encをmkenc.plでeuc-jp用にしたもの
shift_jis.enc: x-sjis-cp932.encをmkenc.plでShift_JIS用にしたもの
x-euc-jp-unicode.enc、x-sjis-cp932.encは元のままです。

test/
tenc.pl : 作成したマッピング・ファイルのチェック用スクリプト
teste.xml : テスト用XMLファイル(EUC)
testsj.xml : テスト用XMLファイル(SJIS)
result : 実行結果

3. 使い方

いたって単純です。

  1. マッピングファイルが格納されているディレクトリに移動します。
    以下のようなディレクトリになります:
    c:\perl\site\lib\xml\parser\encodings (Win32)
    /usr/local/lib/perl5/site_perl/5.005/XML/Parser/Encodings (UNIX)
  2. 元のエンコーディングと出力先のエンコーディングを指定してmvenc.plを
    実行してください。

    ex1. x-sjis-cp932を Shift_JISとする場合
    > perl mvenc.pl x-sjis-cp932 Shift_JIS

    ex2. x-euc-jp-unicodeを euc-jpとする場合
    > perl mvenc.pl x-euc-jp-unicode euc-jp

これでShift_JISやeuc-jpを指定することができます。使い方についてはtestディレクトリのtenc.plをご覧ください。


ホーム Perlの小技

ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。