|
|
Perlプログラム作成の文字コードの設定 |
H.Kamifuji . |
Perlを使ってプログラムを記述する場合に日本語を使用する場合は文字コードを意識してプログラムを記述する必要があります。ここでは使用する文字コード毎にプログラムの記述方法を確認します。 当ページでは、Linux CentOS7 の Gnome で動作テストしています。 |
|
プログラムを記述する場合に文字コードとしてUTF-8を使用する場合を確認します。 UTF-8を使用する場合は「utf8」プラグマを使ってプログラムの冒頭で次のように記述します。 use utf8;これでPerlのプログラムがUTF-8を使って記述されていることを宣言することができます。テキストエディタなどでプログラムを記述した時に、文字コードをUTF-8を指定して保存して下さい。 ただしWindows環境の場合であれば、何かキーボードから文字を入力したり、画面に出力する時にはシフトJISを使用するため合わせて次の設定が必要となります。 use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)';※「cp932」はMicrosoftがShift_JISを独自に拡張した文字コードです。「cp932」の代わりに「shiftjis」や「Shift_JIS」を指定してもいいですが「cp932」の方がよりよさそうです。 これで標準入力からはシフトJISがUTF-8に変換されて読み込まれ、標準出力と標準エラー出力にはUTF-8がシフトJISに変換されて出力されます。 これでUTF-8を使ってPerlのプログラムを記述する準備ができました。 では簡単なプログラムで確認して見ます。 サンプルプログラム下記のサンプルを実行してみよう。# UTF-8を使用する use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; print "こんにちは\n"; print "図表\n";上記を「test1-1_u.pl」の名前で保存します。保存する時の文字コードは「UTF-8」として下さい。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。 ![]() 日本語も問題なく処理されていることが確認できます。 Linux の UTF-8 環境で実行すると下記のように、「Shift_JIS」で出力されているようです。nkf -w で UTF-8 に変換しています。 [xxxxxxxx@dddddddddd Encoding]$ perl test1-1_u.pl | nkf -w こんにちは 図表 [xxxxxxxx@dddddddddd Encoding]$ |
プログラムを記述する場合に文字コードとしてシフトJISを使用する場合を確認します。 シフトJISを使用する場合は「encoding」プラグマを使ってプログラムの冒頭で次のように記述します。 use encoding "cp932";※「cp932」はMicrosoftがShift_JISを独自に拡張した文字コードです。 この記述を行うとシフトJISで記述されたプログラムをUTF-8に変換して処理してくれます。よってテキストエディタなどでプログラムを記述した時に、文字コードをシフトJISを使って保存することができます。 また自動的に標準入力と標準出力の文字コードが指定した文字コード(今回の場合はシフトJIS)となるため、明示的に標準入力と標準出力の文字コードを指定する必要はありません。ただ標準エラー出力だけは自動で設定が行われないため明示的に設定が必要となります。 use encoding "cp932"; binmode STDERR, ':encoding(cp932)';これでシフトJISを使ってPerlのプログラムを記述する準備ができました。 では簡単なプログラムで確認して見ます。 サンプルプログラム下記のサンプルを実行してみよう。# Shift_JIS(cp932)を使用する use strict; use warnings; use encoding "cp932"; binmode STDERR, ':encoding(cp932)'; print "こんにちは\n"; print "図表\n";上記を「test2-1.pl」の名前で保存してから次のように実行して下さい。 ![]() 日本語も問題なく処理されていることが確認できます。 Linux 環境での実行結果は、下記のようです。 [xxxxxxxx@dddddddddd Encoding]$ perl test2-1_s.pl | nkf -w こんにちは 図表 [xxxxxxxx@dddddddddd Encoding]$標準出力には、シフトJIS で出力されているので、nkf -w で UTF-8 に変換しています。 |
|