ハードなソフトの話

アクセスカウンタ

zoom RSS ActivePerl 5.8.X で日本語処理をする

<<   作成日時 : 2005/05/22 10:49   >>

ブログ気持玉 0 / トラックバック 3 / コメント 0

Windows で ActivePerl 5.8.X 以降を使う場合、次のように宣言すると、標準入出力やPerl/Tkも日本語で使えるようになる。ソースプログラムも Shift-JISコードで保存できるようになって便利。
use encoding 'shiftjis';

ただし、さまざまな問題があるので、以下の点に気をつける必要がある。

また、Perl/Tkでの日本語の例は下記の記事に加筆していく予定。

テキストエディタで、UTF-8が使えるのなら、ソースコードはUTF-8で保存し、標準入出力やファイルの入出力のエンコードを Shift JIS(CP932)にする設定をしたほうが何かと便利と思われる。
use utf8;
use open IO => ":encoding(cp932)", ":std";

しかし、標準エラー出力は適当な設定になっているので、日本語をエラー出力すると文字化けする。だから、次の実行文をプログラムの先頭に書いている。
binmode(STDERR,'encoding(cp932)');

これで、warn などで日本語を使っても安心。これで、もう日本語固有の設定が終わりかというと、そうでもない。 Win32::OLE を使ってWindows 上の Microsoft Excel などの OLE 対応のプログラムを操作するとき、日本語文字列が化けまくってしまう。懸命な読者は既におわかりでしょう。Perl の内部では UTF-8を使っているのに、Windows の内部では UTF-16を使っているため。そんなとき、次のようにオプションを設定すれば、日本語文字列が化けない。
Win32::OLE->Option(CP=>Win32::OLE::CP_UTF8, Warn=>3 );

"Warn=>3"は転ばぬ先の杖といったもの、日本語文字列の設定とは関係ない。この設定を入れるとOLEで発生した警告エラーがトラップされる。エラー出力に日本語メッセージで表示されるので、binmode(STDERR,'encoding('cp932'); は必須の設定になる。

以上の3つの設定はWindowsで日本語アプリケーションを作成するときは必須の設定だけど、苦労して考えたわりには、すぐに忘れる。そこで、ここに書いてみた。環境を判断して自動的に設定されるモジュールを書くべきかもしれない。

※このブログ内で表記を統一するために一部修正しました。(2006/4/18)
※encoding 'shiftjis'の問題に気づいたので加筆しました。(2008/2/6)

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(3件)

タイトル (本文) ブログ名/日時
Perl で Excel から日本語データを正しく読む
Windows 版のActive Perl で Excel ファイルを読むにはいくつかの方法がある。 そのうちのひとつに DBI を使って、読む方法がある。 あらかじめ、 ppm で DBI と DBD-ADO をインストールすれば、次のようなプログラムで、とりあえず、Excel からデータを読むことができる。 ...続きを見る
ハードなソフトの話
2006/03/24 00:27
Windows版Active Perl 5.8.X 日本語テキストファイルの標準入出力
前に、「Windows版 Active Perl 5.8.X で日本語処理をする」でencodingプラグマについて触れた。しかし、この機能には小さなバグがあった。Perl 5.8.7で確認しているので、それ以上前のバージョンで発生すると思われる。 たとえば、次のように宣言する。use encoding "shiftjis";こうすると、Perlの次のような動作になる。 ソースファイルはシフトJISコードで扱う 内部コードはUTF-8を使用する 標準入力(STDIN)からシフトJI... ...続きを見る
ハードなソフトの話
2006/04/03 23:34
PerlはglobよりもFile::Nextでファイル一覧
Perlでファイル一覧を取得するのは glob、フォルダをたどっていくならFile::Findというのが一般的なようだけれど、File::Nextのほうが簡単でわかりやすい。 Windows版のActivePerlやでは標準モジュールとして組み込まれていし、strawberry perlでもcpanからインストールできる。使い方はこんな感じ: use utf8; use open IO =&gt; &quot;:encoding(cp932)&quot;, &quot;:std... ...続きを見る
ハードなソフトの話
2011/11/09 11:30

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
ActivePerl 5.8.X で日本語処理をする ハードなソフトの話/BIGLOBEウェブリブログ
文字サイズ:       閉じる