我正在使用邮件应用程序,我有一些解码mime编码文本的麻烦。我正在使用MimeUtility.decode()但它不适用于每个编码文本。有些文本被正确解码,但有些则不能。
这些无法解码的编码文本尤其具有utf-8和iso-8859-9编码类型。
我怎么能解决这个问题?
这是我用于解码的代码
MimeUtility.decodeText(text);
这些是失败文本的示例:
****解决方案*****(感谢@ user_xtech007)
我通过使用正则表达式分割多个编码部分来解码编码部分的问题。
这是我使用的方法的代码
private final String ENCODED_PART_REGEX_PATTERN="=\\?([^?]+)\\?([^?]+)\\?([^?]+)\\?=";
private String decode(String s)
{
Pattern pattern=Pattern.compile(ENCODED_PART_REGEX_PATTERN);
Matcher m=pattern.matcher(s);
ArrayList<String> encodedParts=new ArrayList<String>();
while(m.find())
{
encodedParts.add(m.group(0));
}
if(encodedParts.size()>0)
{
try
{
for(String encoded:encodedParts)
{
s=s.replace(encoded, MimeUtility.decodeText(encoded));
}
return s;
} catch(Exception ex)
{
return s;
}
}
else
return s;
}
将您收到的字符串转换为字节数组,然后使用它来解码utf-8文本
String s2 = new String(bytes, "UTF-8");
首先将ISO-8859-1文本转换为字节数组,然后将其转换为字符串
byte[] b2 = s.getBytes("ISO-8859-1");
要从uri获取编码字符串,可以使用Regex
你也可以通过put来解码这个字符串
System.setProperty("mail.mime.decodetext.strict", "false");
在你使用MimeUtility.decodeText(text);
之前
这将确保“内部词”也被解码:
mail.mime.decodetext.strict属性控制MIME编码字的解码。 MIME规范要求编码的单词从空格分隔的单词的开头开始。一些邮件程序错误地在一个单词的中间包含编码的单词。如果mail.mime.decodetext.strict系统属性设置为“false”,则将尝试解码这些非法编码的单词。默认值为true。
https://docs.oracle.com/javaee/7/api/javax/mail/internet/MimeUtility.html