perlの日本語文字コードはどうすべき?
perlで細かいことを理解できないままに呪文のように頭に
require 'cgi-lib.pl';
require 'jcode.pl';
を使っていました。
そのうち文字化けなどの問題も出て、いろいろ調べたり質問したりして、jcode.plは古いからJcode.pmを使いなさいと指摘を受けたので、
require 'cgi-lib.pl';
require 'Jcode.pm';
と呪文変更を行いましたが、これについての使い方を理解せぬうちに、use Encode qw(from_to encode);としなさいと指摘を受け、
require 'cgi-lib.pl';
use Encode qw(from_to encode);
と変えて使っていました。
ところが、このパターンを使っていたところ、GETでのデータの受渡がうまくできない(internal server error)となることに気づきました。
2つ目のパターンでも同じでした
local($key,$val);
undef(%in);
&ReadParse;
my($method) = $ENV{'REQUEST_METHOD'};
if ($method eq "GET"){
$QUERY_DATA = $ENV{'QUERY_STRING'};
}elsif ($method eq 'POST'){
read(STDIN, $QUERY_DATA, $ENV{'CONTENT_LENGTH'});
}else{
&error;
}
データの受信はこのようにはじめています。
そもそもJcode.pmやuse Encode qw(from_to encode);というのはjcode.plに変わる日本語変換のパッケージなのでしょうか?
また、
require 'cgi-lib.pl';
require 'jcode.pl';
use Encode qw(from_to encode);
とするとGETでの受渡も問題なかったのですが、2つを混在させても問題ないのでしょうか?
というのも、メール送信で文字変換させるときに
sub jis{
my $msg = $_[0];
Encode::from_to($msg, "shiftjis", "iso-2022-jp");
return $msg;
}
としているので、use Encode qw(from_to encode);がないとEncode::from_to()が使えないのかなと想像し2つをセットで使用しています。(冒頭でuse Encode qw(from_to encode)を宣言し、変換部分でEncode::from_to()を使用)
jcode.pl、Jcode.pm、use Encode qw(from_to encode)、Encode::from_to()の関係について教えてください。
もちろん自分でもネットで調べてみましたが、思うように解説してあるところが見つからず困っています。