我有一个quartz cron
作业,可以在特定时间间隔内轮询来自服务器的电子邮件。它递归,并提取所有附加的文件并保存。
它与95%的用户配合得很好,但有时,我会收到电子邮件,其附件的名称以不同的格式编码,例如:
=?windows-1252?Q?This_is_nice?windows-1252?Q?=2Em4v?=
我很确定他们看起来很好,当他们被发送时
如何将这些乱码文件名再次转换为可读文本,以便我可以正确设置文件名?
我正在使用基本的JavaMail功能(Part.getFileName())
答案 0 :(得分:0)
看起来文件名中的某些字符无法用电子邮件中使用的编码表示。您是否明确为邮件设置了文本编码,如果没有尝试按照建议here将其设置为UTF-8。
答案 1 :(得分:0)
那里发生了一些严重的腐败现象。什么程序发送这些消息?它看起来好像有些程序试图对文件名进行两次编码。可能是一些垃圾邮件发送者试图在Windows中触发一些错误。
在这种情况下,你几乎不得不求助于启发式。当您获得异常时,您可以提取原始标头并尝试任何您想要解码标头的内容。如果文件名以可预测的方式被破坏,您可能可以撤消损坏,然后使用MimeUtility方法对其进行解码。
答案 2 :(得分:0)
这不是腐败。如果指定了文件名的字符集和编码,我建议您使用正则表达式来检测和清除文件名。
“=?” charset“?”编码“?”编码文本“?=”