邮件乱码问题
通知メールで文字化け
通知邮件乱码
-》通知邮件中出现了乱码问题(20090511追加)。
通知(つうち): 通知
メール( mail ): 邮件
文字化け(もじばけ): 乱码
问题描述:
<!-- [if !supportLists]-->「①」 <!-- [endif]-->が「 ? 」に文字化けしている。
页面上的 ① ,在邮件中出现了乱码,变成了问号?
我的调查过程:
1.Debug, ,发现,取得的邮件内容中,①②之类的文字是能正确显示的。
// メールの内容
String content = mailTransformer.transform(mailData, stylesheetUrlForSuccess);
2. 因为此处的邮件发送是先将邮件信息(包括邮件 subject 、内容等)存储在数据库表,然后再搜表发信的。想到去数据库表中确认,发现此时存储的记录(邮件 内容)没有乱码。
3. 再次 debug ,发现,将邮件内容从数据库中拿出来之后,最后真正执行邮件发送时(下述代码所示), sender 中的邮件内容还没有乱码,正常显示。
// 送信する
jp.co.×××.×××.mail.MailSender sender = new JavaMailSender(mail);
try {
sender.send();
。。。。。。
现 在 , 问题的 焦点集中到了 邮 件在网 络 中 的传输过 程中采取何 种编码 。
1. 调查 Intra-Mart 的 API ,关于 StandardMail (说明了配置文件的位置和设置相关)。
jp.co.intra_mart.foundation.mail.javamail |
charset | キャラクターセット |
mimeEncoding | MIME エンコード (B or Q) |
contentTransferEncoding | ボディのエンコード |
導入されたバージョン :
5.0
関連項目 :
-》服务器上的/conf/mail目录下的encode.properties文件,请在这个定义文件中进行(字符编码)设置。(20090511追加)
2. 在网上找到这样一篇文章《 如何 处 理日文系 统 中的 NEC 拡張字 》:
从这上面得到这样的信息: ① ② ③ 是 NEC拡張 字,在 Shift_JIS 中不支持(无法显示),在 Windows-31J 支持显示。
3. 找到 C:\imartDebug\conf\mail 文件 夹 ,有 encode_ja_JP.properties 和 encode_ja.properties 文件 。
-》这是本地mail发送字符编码的设定文件夹(20090511追加)
尝试在这两个 mail 配置文件上打字符集设置的主意。
1. 经测试(每次修改后都要重新启动服务器,有点小麻烦),跟 encode_ja.properties 文件 没什么关系,转向专攻 encode_ja_JP.properties 文件 。原先该文件中的设置如下: charset=iso-2022-jp
先后尝试过 Shift_JIS 和 Windows-31J ,都不行,要么是全部乱码,要么是 ① 乱码问题也没有解决。
2. 根据 API 中的描述,也尝试了将 mimeEncoding 从 B 修改成 Q ,还是没有效果。
最终问题解决:将 charset 改成 UTF-8 ,重启服务器,测试发信,收信,乱码没有了, OK ,问题解决!
UTF ( Unicode Transformation Format),果然名不虚传!
-》当邮件在网络中进行传输时,字符编码采用统一字符编码格式 UTF-8,能解决收到的邮件中可能出现乱码的问题。(20090511追加)