• ベストアンサー

CGIプログラムを使った申し込みフォームでメーラーに送信し、HTML形式で表示していますが文字化けしてしまいます。。

Perlで書いたCGIプログラムを使って、申し込みフォームを作成し、送信先をOutlookExpressのメーラーにしてHTML形式で表示しています。 サーバーはLINUX、メールを見ているPCはWindows98SEです。 しかし、なぜか申請書という文字が瑞ソ書というふうに文字化けしてしまいます。 他の字は大丈夫のようなんですが。。どうしたら良いでしょうか? もちろん、print OUT "Content-type: text/html; charset=\"ISO-2022-JP\"\n"; の指定はしています。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

「申請書」が「瑞ソ書」に化けてしまうのは、スクリプトがシフトJISで書かれているために起こる問題であって、メールの送信云々とは無関係です。 例えば、   print "申請書"; とだけ書いたスクリプトで、同様の結果が得られます。 直すには、「申」の後ろに「\」を付ける(つまり "申\請書" とする)方法が簡単です。 他にも「表」「予」「能」など、文字化けを起こしたりする文字が多数あります。 以下に原因の詳細などを書きますが、長いので興味がなければ読み飛ばしてください。 「申請書」のシフトJISの文字コードは   申   請   書   90 5C 90 BF 8F 91 (16進) となっています。 このうち「申」の2バイト目である「5C」というコードは、文字「\」(エスケープコード)であるため、すぐ後の「90」とくっついて「\x90」という扱いになってしまいます。 つまり Perl の内部では、   print "\x90\x90\xBF\x8F\x91"; であると解釈されてしまい、これをシフトJIS環境で表示すると   90 90 BF    8F 91 (16進)   瑞   ソ(半角)書 となるわけです。 ※もし「ソ」が全角になっているとすれば、メール送信用にJIS変換する際に、jcode.pl よって全角に変換されているのです。 このような原因により、既に化けてしまった文字列を メール送信しているので、受け取った側でも化けて見えるのは当然ですね。 この問題は Perl がシフトJISの事情など考慮せずに作られているのが原因(世界中で使われているのだから当然)で、上記のように「5C」の後ろにもう1つ「5C」を書くことで解消できます。 これが面倒な場合は、日本語が扱える jperl を使う、スクリプトを EUC で書く、などの対処方法があります。

ponsuke777
質問者

お礼

なるほどーー!! 大変、くわしい説明ありがとうございました。 解決しただけでなく、大変、勉強になりました!!

その他の回答 (3)

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.3

こんにちは    euc  jis  sjis unic 申 BFBD 3F3D 905C 7533 請 C0C1 4041 90BF 8ACB 書 BDF1 3D71 8F91 66F8 瑞 BFF0 3F70 9090 745E ソ A5BD 253D 835C 30BD 書 BDF1 3D71 8F91 66F8 申請書の申のShift JISの2バイト目が5Cですね。 瑞ソ書のソのShift JISの2バイト目も5Cですね。 5Cは\です。 これが文字化けの原因でしょうね。

ponsuke777
質問者

お礼

ご回答、ありがとうございました!!

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.2

もしくは「申請書」→「¥申¥請書」

ponsuke777
質問者

お礼

ご回答ありがとうございました。 「¥申請書」ではだめでしたが、 「¥申¥請書」 で、できました。でも、「申¥請書」 でいいみたいです。

  • kosa
  • ベストアンサー率25% (379/1464)
回答No.1

\をつけてエスケープしてみましょう 「申請書」→「¥申請書」

関連するQ&A

専門家に質問してみよう