diff -urN ../htmllint.orig/tagslist.cgi ./tagslist.cgi --- ../htmllint.orig/tagslist.cgi Thu Sep 6 20:50:00 2012 +++ ./tagslist.cgi Sat Sep 8 01:00:00 2012 @@ -631,17 +631,36 @@ close TAGSLIST; chmod 0764, $tagslist if $UNIX; select STDOUT; - &EchoHTML($tagslist); + &EchoHTML($tagslist, $outCODE); } } sub EchoHTML { my $html = shift; + my $htmlCODE = shift; if (open HTML, $html) { $| = 1; &PrintHTTPHeader; - print $_ while ; + # HTMLヘッダ中に日本語文字がないことを前提にしている。 + # もし万一、該当のmetaタグがないか、認識できないcharsetの場合は、 + # $htmlCODE==undefでループを抜けるが、 + # その場合Jconvertは入力から文字コードを推測して変換する。 + while (!defined($htmlCODE) and my $s = ) { + if ($s =~ s#(]+)#$1$CHARSET#oi) { + $htmlCODE = {'EUC-JP'=>'euc', 'SHIFT_JIS'=>'sjis', 'ISO-2022-JP'=>'jis', 'UTF-8'=>'utf8'}->{uc($2)}; + } + print $s; + last if $s =~ m##oi; + } + # 場合分けする必要はないかもしれないが、 + # 通常の使用状況ではJconvertが不要なケースがほとんどであるし、 + # 実測してもJconvertなしの方が速いので負荷軽減のため。 + if ($htmlCODE ne $outCODE) { + print &Jconvert($_, $outCODE, $htmlCODE) while ; + } else { + print $_ while ; + } close HTML; return 1; }