- ベストアンサー
動作するのですが一部の文字のみバケます。原因がわかりません。
Perl二日目の激初心者です。 端末にパールとアパッチを導入し テキストを読みながらあくせくしております。 で、早速エラー個所ですが 以下のスクリプトの下のほうの $comment = "いつもより結構マシ"; の「構」の文字のみブラウザから見ると化けて 「いつもより結鴻}シ」と、なります。 試しに他の文字にしますと (例えば「随分」とか)エラーは起きません。 質問の仕方や、論点がわかりにくいと思った方は 是非ご指摘下さい。 宜しくお願いします。 ■環境 OS:2000 ブラウザ:IE、FireFoxいずれでも同症状を確認 Cドライブ直下にパールとアパッチが入ってます。 ■エラーと思われる個所 $saikoro = int( rand 3 ); if($saikoro == 0) { $kekka = "凶"; $comment = "今日は外れ。"; } elsif($saikoro == 1) { $kekka = "小吉"; $comment = "いつも通りじゃない?"; } else { $kekka = "大吉"; $comment = "いつもより結構マシ"; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
'構'の字は、コード8D 5Cであり、エスケープ文字である「\」と勘違いしてしまいます。 #1さんの仰る様に、これが原因で文字化けを起こしていますが、[いつもより結構\マシ]と、文字の後ろに¥です。 なお、この例の様に、""の内容に変数を含めない場合(展開しない場合)には、""ではなく''を用いれば、回避できる事が多いです。
その他の回答 (1)
- bloomers_daisuki
- ベストアンサー率14% (40/267)
日本語に対応していない処理系(コンパイラやインタプリタ)に有りがちな「\」問題でしょうか。 試しに、"いつもより結構マシ"を"いつもより結\構マシ"としてみてください。 C言語で'\n'とすると改行を意味しますが、このとき付ける'\'がエスケープシーケンスになっています。'\'の次の文字と合わせて特殊な文字を現わしているのですが、'\'自身を表現するために'\\'とします。 文字コードを調べるのがめんどうなので解りませんが「構」が'\'と同じ値を持っていたら'\z'みたいになって1バイト分文字が落ちてしまうと言うことです。それを'\'を追加することで補います。
お礼
早速のご指摘ありがとうございます。 やってみたのですが...なおりません。 でも、エラーの原因個所に間違いなさそうですし 大変勉強になりました! やっぱりPerlは難しいです...。 (ちなみに回答No.2 sion_fsさんのご指摘どおり 「結構\マシ」 と、後ろに記載したところ直りました。)
お礼
ご指摘ありがとうございます。 なおりました! こういった「エスケープ文字と勘違い」って多いものなんですかねぇ? あと、ご指摘どおり "を'に修正し\をつけない状態 $comment = 'いつもより結構マシ'; に、した所これまたエラーは回避できました。 これからも精進に励みたいと思います。 本当にありがとうございました。