• ベストアンサー

文字化け

サイトにカレンダーを設置しようとしたんですが、 2005年4月 日 月 火 水 木 金 土 と表示されるはずなのに、 2005年4・/b> 楠:/font> ・/font> 於:/font> 水 万:/font> 金:/font> 土 こんな感じで文字化けしてしまいます。 いくつか他のcgiのカレンダーをダウンロードして試してみたんですが、どれもやっぱり日付のところが上のようになってしまいます。cgiというよりどこか他のところに問題があるのかなとも思うんですが、どうすればいいでしょうか。 cgi以外の部分は特に文字化けはありません。他にフォームメールのcgiも使ってみましたが、こちらも問題なく使えました。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kiki_s
  • ベストアンサー率59% (147/248)
回答No.2

エスケープシーケンスというのは、 画面などに表示出来ない特殊な文字の指定などを行うための事です。 以下は専門的になりますが、説明下手はご勘弁下さい。 今回の文字化けの原因は、Shift-JISという規格とPerl側にあります。 Pelrは日本語対応できるように作られた訳ではありませんので、 特定条件のときに文字化けを起こします。 文字(漢字を含む)は、文字コードといって、16進という数値で表されます。 例えば「表示」の文字コードは「955C8EA6」(「955C」で表、「8EA6」で示)なのですが、 この時、「5C」の部分が文字コードが「5C」の「\」と解釈されてしまい、Pelrが「5C」を消してしまいます。 (エスケープとは逃げるとか消すという意味だと考えて頂いていいでしょう) 結果、「955C8EA6」が「958EA6」になり、 「958E」で「侮」、「A6」が「ヲ (この場合半角文字)」になってしまいます。 文字コードにして「5C」が含まれる場合は、エスケープされる文字を追加する必要があります。 「表示」の文字の場合、「表\示」文字コードでは「955C5C8EA6」となるようにします。 「表\示」と書くと、Pelrは最初の「5C」を消してしまいますが、その後ろは消しません。 そうすると「955C8EA6」になりますので、正しく「表示」となります。 文字コードで「5C」を含む文字は全て同じになります。 エスケープの方法は、#1さんの書き方で大丈夫でしょう。 因みに、EUCという規格で書けばこの問題は起こりません。

panda_usagi
質問者

お礼

試行錯誤で一応なんとかできました。が、もう少し研究してみます。色々勉強になりました。ありがとうございました。

その他の回答 (1)

  • souta_n
  • ベストアンサー率33% (79/234)
回答No.1

エスケープシーケンスしないと駄目な文字が途中で入っているのでは? 例えば「表示」なんかをPerl-cgiのprintで、HTML出力させるときは、 print "<H1>表示</H1>\n"; なら print "<H1>\表\示</H1>\n"; としないと化けるんですよ。

panda_usagi
質問者

補足

早速回答ありがとうございます。 あの、エスケープシーケンスというのがよく分からないのですが・・・。 >print "<H1>\表\示</H1>\n"; のサンプル例から見ると、\マークを入れておけばいいということですか?

関連するQ&A