アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (4件)

\をつけてエスケープしてみましょう


「申請書」→「¥申請書」
    • good
    • 0

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/20 13:38

こんにちは



   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は\です。
これが文字化けの原因でしょうね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/20 13:36

「申請書」が「瑞ソ書」に化けてしまうのは、スクリプトがシフト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 で書く、などの対処方法があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/20 13:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!