gitweb.cgiのeuc-jp、shiftjis対応

注意!(2015-07-22) このやりかただと、変換に失敗したときに、エラーログが大量に吐かれてしまいますので、注意してください。
たとえば、http://mikan.azulite.net/wiki.cgi?page=Git&action=SOURCEのやり方の方がスマートです。

==============================
ちょっと必要に迫られて対応した。

関数to_utf8あたりをいじって、Encode::from_toとか使ってなんとかするのかなぁ、と思っていたが、
結局は、ファイル読み書きするときに文字コードを変換する方針。

参考はこのへん
http://www.rwds.net/kuroita/program/Perl_unicode.html

diff -u gitweb.cgi new_gitweb.cgi

— gitweb.cgi 2010-11-24 01:03:30.697219844 +0900
+++ new_gitweb.cgi 2010-12-28 22:34:51.702462351 +0900
@@ -16,7 +16,10 @@
use Fcntl ‘:mode’;
use File::Find qw();
use File::Basename qw(basename);
binmode STDOUT, ‘:utf8’;
+use open IN => ‘:encoding(euc-jp)’;
+use open OUT => ‘:utf8’;
+use open ‘:std’;

BEGIN {
CGI->compile() if $ENV{‘MOD_PERL’};

—–追記
その後、shiftjis対応を迫られたので、上の通りで、euc-jpをshiftjisに変えたらうまくいった。
(binmode STDOUTは最初コメントしてたけど、その必要はなかったので、上の記事をちょっと修正しました。)


コメントを残す