【发布时间】:2011-08-09 10:38:16
【问题描述】:
我在解码电子邮件附件的文件名时遇到问题。目前我正在使用 JavaMail 1.4.2。该文件名为“Żółw.rtf”(这是 Turtle.rtf 的波兰语)。邮件是使用 Mail.app 发送的(这似乎很重要)。重要的标题是:
--Apple-Mail-19-721116558
Content-Disposition: attachment;
filename*=utf-8''Z%CC%87o%CC%81%C5%82w.rtf
Content-Type: text/rtf;
x-unix-mode=0644;
name="=?utf-8?Q?Z=CC=87o=CC=81=C5=82w=2Ertf?="
Content-Transfer-Encoding: 7bit
对应的javax.mail.Part.getFileName()返回“=?utf-8?Q?Z=CC=87o=CC=81=C5=82w=2Ertf?=”,其中,应用MimeUtility.decodeText后, 是:“ZÃáoÃÅ≈Çw.rtf”。显然不是原版:)。
为了比较,MimeUtility.encodeText 返回:
=?UTF-8?Q?=C5=BB=C3=B3=C5=82w.rtf?=
对比:
=?utf-8?Q?Z=CC=87o=CC=81=C5=82w=2Ertf?=
来自电子邮件。
根据我的研究,字母“Ż”可以通过两种方式编码:单个字母或“Z”+上点。 MimeUtility.encodeText 使用前者,Mail.app 使用后者。
但是我希望能够同时解码两者。有没有办法在使用 JavaMail 从 Mail.app 发送文件名时解码文件名?或者也许还有其他图书馆?
谢谢! 亚当
【问题讨论】:
-
回答我自己,你必须规范化字符串: String decoded = MimeUtility.decodeText(part.getFileName());返回 Normalizer.normalize(解码,Normalizer.Form.NFC);奇怪,但有效! :)
-
很高兴您找到了解决方案!您可以将其发布为答案吗?这将帮助将来遇到同样问题的人(你可能也会得到支持 ;-))
标签: java macos mime jakarta-mail