Perl:日本語対応

提供:yonewiki

Perlに戻る 

日本語対応

従来のVersion5.88より前のActive Perlでは日本語対応のためには、
別途準備しておくモジュールjcode.plやjcode.pmといったファイルに記述されている関数に
使って、日本語部分の処理方法を記述する必要がありましたが、5.88以降は簡単な記述で利用する文字コードを
指定できるようにななりました。

具体的にはEncode.pmが標準で利用できるようになったために楽になったということですが、
以下のようなプラグマ(use utf8の部分)と呼ばれる記述と binmode 関数での標準入出力の定義が必要です。

use utf8;
binmode STDIN,  ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";

エラー出力に関する文字コードの定義はできないため、エラーコードは半角英数で記述するか、
個別に文字コードを変換する関数で変換をするような処理が必要になります。

したがって、ActivePerl 5.88以降では、以下のサンプルコードをPerlスクリプトとして実行すると
文字化けを起こすことなく、処理が実行されます。

#!/usr/bin/perl -w
use strict;
use utf8;
binmode STDIN,  ":encoding(cp932)";
binmode STDOUT, ":encoding(cp932)";

print "日本語Perlプログラミング\n";

但し、utf-8の文字コードセットでスクリプトを記述する必要があります。
何もしなくてもWindows上でShift-JIS(sjis)だけを使っている分には、文字化けは起こりません。
厳密な日本語対応をしようとすると上記のような対応が必要不可欠になります。

と、これで完璧!かと思わせといてなのですが…
実はActive Perlを提供しているActive States社が取り扱っている
KOMODO IDEを使って、実行したり、デバッグをする際にはcp932で出力するとDebug Outputの
Output ViewやHTML Viewの表示で文字化けが起こります。

この文字化けを防ぐには敢えてWindows標準ではないutf8で出力しないと日本語が表示されません。
デバッグ作業をしている時だけはSTDOUTのエンコーディングにutf8を指定し、リリース時にcp932へ戻すという
そういう工夫をするのが良さそうです。

#!/usr/bin/perl -w
use strict;
use utf8;
binmode STDIN,  ":encoding(cp932)";
binmode STDOUT, ":encoding(utf8)";

print "日本語Perlプログラミング\n";



●cp932とは
cp932はマイクロソフトが定義したShift-JISにほぼ一致する文字コードセットです。具体的には数十文字が一致しないので、
cp932ではなくShift-JISと定義するとWindows上では、文字化けが発生します。

●utf8とは
UNIXでも利用される文字コードで、Windowsでも比較的扱いやすい文字コードで、
各種アプリケーションがこの文字コードセットに対応している。幅広く使われる文字コードセットです。

●文字コードセットってなんでこんなにいっぱいあるの?
日本語と英語があるようなものと同じです。提案する人がいて、使う人がいれば、統一されずに使われ、
なおせと言われても、いやいまさら、そんなこと言われてもとなるわけです。
いやでしょ。明日から英語しか使うなって言われたら…と、そういうことだと思っています。
しかも、同じ日本語の文字コードセットでも、他にもいくつか種類があります。


Perlに戻る