Java 修复文件附件的名称

Java 修复文件附件的名称,java,email,encoding,playframework,jakarta-mail,Java,Email,Encoding,Playframework,Jakarta Mail,我有一个quartzcron作业,它在特定的时间间隔内轮询来自服务器的电子邮件。它以递归方式运行,提取并保存所有附加文件 95%的邮件都能很好地处理,但有时我会收到电子邮件,其附件的名称以不同的格式编码,例如: =?windows-1252?Q?This_is_nice?windows-1252?Q?=2Em4v?= 我很确定,当他们被送去的时候,他们看起来还不错 如何将那些乱码的文件名再次转换为可读文本,以便正确设置文件名 我使用的是基本的JavaMail功能(Part.getFileNam

我有一个quartz
cron
作业,它在特定的时间间隔内轮询来自服务器的电子邮件。它以递归方式运行,提取并保存所有附加文件

95%的邮件都能很好地处理,但有时我会收到电子邮件,其附件的名称以不同的格式编码,例如:

=?windows-1252?Q?This_is_nice?windows-1252?Q?=2Em4v?=
我很确定,当他们被送去的时候,他们看起来还不错

如何将那些乱码的文件名再次转换为可读文本,以便正确设置文件名


我使用的是基本的JavaMail功能(Part.getFileName())

看起来文件名中的一些字符无法在电子邮件中使用的编码中表示。您是否为消息显式设置了文本编码,如果没有,请尝试按照建议将其设置为UTF-8。

存在严重的损坏。什么程序正在发送这些消息?看起来好像有些程序试图对文件名进行两次编码。可能是一些垃圾邮件发送者试图在Windows中触发一些bug


在这种情况下,你几乎不得不求助于启发式。当您得到异常时,您可以提取原始头并尝试任何您想要解码头的方法。如果文件名以可预测的方式损坏,您可能可以撤消损坏,然后使用MimeUtility方法对其进行解码。

这不是损坏。如果指定了文件名的字符集和编码,我建议您使用正则表达式来检测和清除文件名

=?“字符集”?“编码”?“编码文本”?=“