1

私たちのアプリケーションは Web フォームからテキストを取得し、適切なユーザーに電子メールで送信します。ただし、悪名高い「スマート クォート」やその他の特殊文字を Word からコピー アンド ペーストすると、事態は複雑になります。

ユーザーが入力します

彼は私に「こんにちは」と言いました。

しかし、メッセージが Outlook 2003 に表示されると、次のようになります。

彼は私にこんにちはと言ったのですか?

このコードは次のとおりです。

Session session = Session.getInstance(props, new MailAuthenticator());
Message msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setSubject(subject);
msg.setText(text);
msg.setHeader("X-Mailer", MailSender.class.getName());
msg.setSentDate(new Date());
Transport.send(msg);

少し調査した結果、これはおそらく文字エンコーディングの問題であると判断し、UTF-8 に移行しようとしました。したがって、コードを次のように更新しました。

Session session = Session.getInstance(props, new MailAuthenticator());
MimeMessage msg = new MimeMessage(session);

//removed setting to/from addresses to simplify

msg.setHeader("X-Mailer", MailSender.class.getName());
msg.addHeader("Content-Type", "text/plain");
msg.addHeader("charset", "UTF-8");
msg.setSentDate(new Date());
Transport.send(msg);

これで近づきましたが、葉巻はありませんでした:

彼は私に「こんにちは」と言いました。

これがまれな問題だとは想像できません。何が見落とされたのでしょうか。

4

4 に答える 4

1

フォームを含むページも UTF-8 または別の文字セットを使用していますか? Web ページの文字セットを指定しない場合、スクリプトに送られるデータの形式は誰でも推測できます。


編集: メッセージの文字セットは次のように設定する必要があります。

msg.addHeader("Content-Type", "text/plain; charset=UTF-8");

charset は個別のヘッダーではなく、Content-type のオプションであるため

于 2009-05-19T16:01:25.100 に答える
0

素敵な引用符を通常のプライム引用符に置き換えてみませんか?

于 2009-05-19T15:49:30.280 に答える
0

IIRC, MS Office quotes are found characterset "iso-8859-1".

于 2009-05-24T15:25:03.153 に答える