« タイトルを探す | メイン | ソースの表示 »

漢字コードの変換

そりゃもちろん、文字化けをなくすため。

変換には(たぶん)「Jcode.pm」を使っている。「htmllint.cgi」で使っていたので、それを参考にしてなんとかできた。意味不明な命令がいくつかあったけど、なんとなく使い方はわかった気がする。説明書を読んだらもっと簡単にわかるのかもしれないけど・・・。

出力は「JIS」にしてみた。「JIS」はブラウザでは文字化けが起きにくいらしいから。Windowsでは「Shift_JIS」、perlでは「EUC」、そしてブラウザでは「JIS」・・・。それぞれ得意分野が違うのは仕方のない事なのかな?

ちなみに、「Jcode.pm」では「Unicode(UTF-8)」も変換に使えるらしい。試してみるのも悪くない。

「Jcode.pm」は「htmllint」を使うためにインストールしたから、使うのは簡単。「require Jcode;」これだけ。あとは、コードを取得する「getcode」と、変換する「convert」の2つ。これらは「*Jgetcode = \&Jcode::getcode;」「*Jconvert = \&Jcode::convert;」と書くことで、「Jgetcode」「Jconvert」という名前でサブルーチンとして使えるようになる(ような気がした)。

「getcode」は、引数に対象となる文字列を渡すと、その文字の漢字コードを返してくれる。「convert」は「変換する文字列、変換目的のコード、変換前のコード」の3つを引数として渡すと、コードが変換されて返ってくる。漢字コードの指定は「utf8」「jis」「euc」「sjis」というふうに指定する。「getcode」でもこれらの文字列が返ってくる。なかなか便利だ。

・・・

今回、ローカル環境から完全に移行するために「jcode.pl」に変更しました。よって「Unicode(UTF-8)」は使えなくなってます。

ソースコード

#!/usr/bin/perl
 
# require Jcode;
# *Jgetcode = \&Jcode::getcode;
# *Jconvert = \&Jcode::convert;
 
require "../../../cgi-bin/jcode.pl";
*Jgetcode = \&jcode::getcode;
*Jconvert = sub { &jcode::to($_[1], $_[0], $_[2]); };
 
@styles = ("../../ipp.css","../test.css");
$title = "テスト10";
$mycode = &Jgetcode(\$title);
$cutcode = "jis";
$scrname = "";
$filename = "";
$rtdir = "../";
$file = "";
 
{
    $scrname = $ENV{'SCRIPT_NAME'};
    $scrname =~ s/_1|_u// ;
    if($scrname =~ /(ts[0-9]{4}\.cgi$)/){
        $filename = $+ ;
        $filename =~ s/cgi/htm/ ;
    }
    
    &printHeader;
    
    print "<div class=test>\n";
    
    &Jprint ("$mycode → $cutcode 変換<br>\n");
    &Jprint ("「親ディレクトリ」には、以下のHTMファイルがあります。");
    print "<ul>\n";
    
    chdir($rtdir);
    opendir(DIR, ".");
    while ($file = readdir(DIR)) {
        if($file =~ /htm$/){
            open(IN, $file);
            while(<IN>){
                if(/<title>/){
                    if($' =~ /<\/title>/){
                        print "<li>$file" ;
                        &Jconv ("(", $`, ")", "\n");
                        last;
                    }
                }
            }
            close(IN);
        }
    }
    closedir(DIR);
    
    print "</ul>\n";
    print "</div>";
    
    &printFooter;
    
    exit;
}
 
sub printHeader{
    print "Content-type: text/html\n\n";
    &Jprint ("<html lang=ja><head><title>", $title, "</title>", "\n");
    foreach $st (@styles){
        print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$st\">\n";
    }
    print "</head><body>\n";
    print "<div class=head>\n";
    &Jprint ("<h1>", $title, "</h1><hr>\n");
    &printlinks;
    print "<hr></div>\n";
}
 
sub printFooter{
    print "<div class=foot><hr>\n";
    &printlinks;
    print "<hr>\n";
    open(IN, "../../sig.txt");
    while ($sig = <IN>){ print $sig; }
    close(IN);
    print "</div>\n";
    print "</body></html>\n";
}
 
sub printlinks{
    print "<a href=\"../../../index.htm\">Home</a>\n";
	print "/\n<a href=\"../../\">Perl</a>\n";
	print "/\n<a href=\"../\">TestCGI Index</a>\n";
    if($filename){
        &Jprint ("/\n<a href=\"../$filename\">", $title, "の解説", "</a>\n");
    }
}
 
sub Jprint{
    foreach (@_) { print &Jconvert($_, $cutcode, $mycode); }
}
 
sub Jconv{
    foreach (@_) { print &Jconvert($_, $cutcode, &Jgetcode($_)); }
}

カテゴリ:

トラックバック

このエントリーのトラックバックURL:

同一カテゴリの最新記事

最近のエントリー

Amazon.co.jp

Creative Commons License
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.
Powered by
Movable Type 3.36
Amazon.co.jp