ついて文字化けがありまして、文字コードを調べてみたところ、
治(8ea1)から釈(8edf)までの2バイト文字が、
。(a1)から゜(df)までの1バイト文字に置き換わっていることがわかりました。
phpの類似情報を見つけましたが、perlで考えられる原因を教えてください。
文字変換に関わる部分を抜粋します。
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if (!($value =~ /\n/) && $value =~ /\r/) { $value =~ s/\r/\n/g; }
&jcode::h2z_sjis(\$value);
&jcode'convert(*name,'euc');
&jcode'convert(*value,'euc');
またhttpd.conf等の設定ファイルを変更すれば問題は解消するのでしょうか?
pack の引数は "C" じゃ無くて "H2" じゃ無いんでしょうか。
もっとも、素直に CGI.pm と Jcode.pm を使うほうがいいと思うんですが。
&jcode::h2z_sjis(\$value);
↓これが原因ではないかもしれませんが下記にします。
&jcode::h2z_euc(\$value);
今回は関係ありませんが私は下記を参照しています。
シフトJISとEUC-JPの領域が重なっているために自動判定では判定不可能な部分です。
治(8ea1)から釈(8edf)までの2バイト文字これはシフトJIS的な解釈の結果。
。(a1)から゜(df)までの1バイト文字
&jcode::h2z_sjis(\$value);$valueの文字コードが定まってからh2zをかけないと無意味では。
...
&jcode'convert(*value,'euc');
コメント(1件)
$code = jcode::getcode($code_detect); # or $code='sjis';
...
jcode::convert(\$name,'euc',$code);
jcode::convert(\$value,'euc',$code);
> pack の引数は "C" じゃ無くて "H2" じゃ無いんでしょうか。
hexを併用しているので,ここの処理は正しいでしょう。
http://www.tohoho-web.com/wwwperl2.htm#pack
http://www.tohoho-web.com/wwwperl2.htm#hex