[Up] [Next] [Previous]

日本語の処理

テキストエリアに日本語を入力し、Perlで処理を行う場合、内部処理を EUCコー ドで行えば問題ありませんが、他のコードを使用している場合は、一度EUCコー ドに変換してあげれる必要があります。コード変換は、nkf コマンドや jcode.plを使用します(下表にjcode.plで使用できる関数を示 します)。

ftp://ftp.lab.kdd.co.jp/Japan/nkf/nkf-1.5pl1.tar.gz
ftp://ftp.lab.kdd.co.jp/Japan/jcode.pl-2.0
関数 機能
&jcode'getcode(*line) 漢字コードの判別
&jcode'convert(*line, $ocode [, $icode]) コード変換
jcode.plの関数

例えば、先程の簡易 Perl ライブラリを例に考えてみます。GETの 場合は適当な漢字コードに変換すればよいのですが、Perl で日本語処理を行 う場合、EUC 以外は難しいようです。従って、内部処理を EUCにして、書き込 む場合にはやっぱりEUCにするか、他の適当なコードに変換するかを考えてく ださい。

下記に簡易 Perl ライブラリを使った例を示します。他にも方法があると思い ますので、考えて下さい。

require 'jcode.pl';

sub read_input
{
    local ($buffer, @pairs, $pair, $name, $value, %FORM);
    # Read in text
    $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
    if ($ENV{'REQUEST_METHOD'} eq "POST")
    {
	read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    } else
    {
	$buffer = $ENV{'QUERY_STRING'};
    }
    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs)
    {
	($name, $value) = split(/=/, $pair);
	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        &jcode'convert(*value, 'euc');
	$FORM{$name} = $value;
    }
    %FORM;
}


[Up] [Next] [Previous]