特徴
電子メールはJIS(7ビットJIS)コードを使うことが慣例(なのか常識なのか?)です。
CGIプログラムなどで変換して送信するわけですが、
perlはCなどのプログラムと比較すると処理が遅いものです。
特に、漢字コード変換などは、主にjcode.plで処理されますが、
ちょっとした文字列の変換には便利ですが、電子メールなど、
データすべてをJISに変換するなど、効率が悪い場合もあります。
そういう場合は、パイプを使って、メール送信する前に、
外部プログラムに漢字変換を任せてしまう方法が有効です。
電子メール試験用CGIプログラムもあります。
例題
jcode.plを使った例
require 'jcode.pl';
open(OUT,"| /usr/lib/sendmail -t");
print OUT "To: 配信先Eメール\n";
print OUT "From: 送信元Eメール\n";
print OUT &jis("Subject: メールのタイトル\n"); #全角文字を送信する場合はJISに変換する
print OUT "Content-Transfer-Encoding: 7bit\n";
print OUT "Content-Type: text/plain; charset=iso-2022-jp\n";
print OUT "\n";
print OUT &jis("メールの内容A\n");
print OUT &jis("メールの内容B\n");
close(OUT);
sub jis { $msg = $_[0]; &jcode'convert(*msg, 'jis'); return $msg; }
nkfを使った例
これはperlだけ(jcode.pl利用)で漢字変換をして電子メール(sendmail利用)する
ルーチンですが、これをnkfに漢字変換を任せるようにするには、次のようにします。
open(OUT,"| /usr/local/bin/nkf -j | /usr/lib/sendmail -t");
print OUT "To: 配信先Eメール\n";
print OUT "From: 送信元Eメール\n";
print OUT "Subject: メールのタイトル\n";
print OUT "Content-Transfer-Encoding: 7bit\n";
print OUT "Content-Type: text/plain; charset=iso-2022-jp\n";
print OUT "\n";
print OUT "メールの内容A\n";
print OUT "メールの内容B\n";
close(OUT);
SSI実行結果を漢字コード変換する場合
UNIXでの漢字コードはEUCを使うのが多く、パソコン(特にWINDOWS)ではSJISを
使うことが多いために問題が生じるということです。これはSSIでの話です。
例えば、アクセスカウンタの場合は数字をHTMLに張り付けるわけですから問題ないのですが、
漢字を入れたい場合は漢字コードの変換が必要です。例えば・・・
test.csh
#!/bin/csh
set kazu="キムタク" <-これはパソコンで書いたのでSJISだ!
echo $kazu
test.html
以上略
みなさん、私は<!--#exec cmd="./test.csh"-->です。<p>
以下略
これだと、SSI埋めこみの前後はSJISで『キムタク』がEUCだったりします。
そこで漢字コード変換プログラムであるフリーソフトのnkfを利用します。
みなさん、私は<!--#exec cmd="./test.csh | /usr/local/bin/nkf -s"-->です。<p>
-s でSJISを出力させる。入力コードは自動判別してくれる。
nkf(v1.6)をインストールする
nkfはプロバイダで用意されている場合もありますので、まず聞いてみてください。
もし存在しなければ自分でサーバにインストールする必要があります。
当然、シェルモードが使えなければできません。
旧バージョンのnkfをインストールする
上記ではv1.6をご紹介しましたが、資料として、いままで当サイトで使っていた旧バージョンも記録に残しておきます。
当サイトで単に漢字コード変換しているだけの機能には、こちらでも全く問題ありません。
- nkfのソース(C言語でかかれたプログラム)をダウンロードします。
nkfの説明書はここにあります。
- それをあなたのディレクトリ(どこでもいいが、私はホームページを置いてあるpublic_htmlという
ディレクトリ下にbinという名前のサブディレクトリを作って置いています)にFTPでアスキーモードで
転送します。私の環境(Windowsからリムへ)の場合、FTPをバイナリ転送すると^Mコードが改行の
場所に入ってしまいコンパイルできませんでした。
- パソコン通信でリムに入りシェルモードにします。転送した場所までディレクトリを移動したあと、
コンパイルします。ccでなくてgccでもコンパイルできます。
%cc nkf.c -o nkf (nkf.cをコンパイルし、nkfという名のオブジェクトを作成する。)
コンパイルが成功すれば、特になにも表示せず%プロンプトが出ます。作成したnkfのオブジェクトの
パーミッションは755になっていると思いますが、確認します。
%ls -l nkf (-rwxr-xr-xならOKです。もし違っていたらchmodします。)
%rm nkf.c (必要なくなったソースを削除します。)
- ccやgccの場所はプロバイダに聞くこと。
- <参考> Unicodeに対応したnkf2がリリースされています。
|