質問: encodeについて こんにちは。いつもお世話になっております。 encodeモジュールについて質問です。インプレスジャパンから出版 されている「まるごとperl」にencodeについて読みましたが、理解 できていないのか、いざスクリプトを書くとうまくいきません。 練習として記述し、utf-8で保存したのが下記です。 use strict; use warnings; use encode; my $test='文字化けしやすい漢字です。表圭臀能'; my $moji=decode('utf-8',$test); my $ans=encode('utf-8',$moji); print "content-type: text/html;charset=utf-8\n\n"; print < encode $ans eoh そもそも、スクリプトをshift_jisで保存したときに文字化けが 起きないようにしたかったので、上記のスクリプトを変えて、 my $moji=decode('shift_jis',$test); my $ans=encode('utf-8',$moji); そしてshift_jisで保存して実行してみましたが、ブラウザには 何も表示されません。 どこが間違っているのか、教えて頂ければ幸いです。 かなり初歩的な内容だと思いますが、どうぞよろしくお願い申し上げます。
回答: スクリプトをいきなりcgiとして動かしていたりしていませんか? サーバーにアップロードして動かす前に、 シェルで動かしてみましょう。 > my $moji=decode('shiftjis',$test); この行にエラーがあるという報告が出ているはずです。 が、実際には原因はそこではないのですが。 問題は >my $test='文字化けしやすい漢字です。表圭臀能'; shiftjisで記述した場合、'能'の第二バイトは '\' と同じですので、 上の行の文字列の代入は'能'までで終わらず さらに先までみていくことになります。 そして、decodeの引数の'shiftjis'の 開きのクォートを見つけたところで文字列が終わったと見なしますが、 さらに見ていったときに登場するshitjis を解釈できないのでエラーになる というわけです。 エラーが発生したためhtmlデータを作成することができなかったので ブラウザから見ても何もないという結果になったわけです。 とりあえずは > my $test='文字化けしやすい漢字です。表圭臀能\'; 能の後ろに'\'をつければ回避できます。 その他の指摘事項はとりあえず出さないでおきます。